Estoy trabajando en una tienda, y para el carrito, necesito almacenar artículos antes del pago.
$tempstore = \Drupal::service('user.private_tempstore')->get('boutique');
$tempstore->set('poids', $form_state->getValue('poids'));
Echo un vistazo al servicio de usuario para:
pivate_tempstore y shared_tempstore
Pero eso solo funciona para usuarios autenticados.
¿Qué puedo usar para almacenar datos? $ _SESION? o Drupal 8 tiene un servicio para eso?
Respuestas:
En Drupal 8 se puede acceder a las variables de sesión desde la solicitud:
Si desea configurar algo en la sesión, puede hacer lo siguiente:
O para recuperar una variable de sesión:
fuente
Respuesta tardía, pero vale la pena mencionar que puede usar tempstore privado para usuarios anónimos, siempre que tempstore tenga acceso a una sesión activa. Para hacerlo, debe inyectar a su clase servicios para la tienda temporal, la sesión y el usuario actual, de esta manera:
Luego, solo debe asegurarse de iniciar el administrador de sesión si el usuario es anónimo, antes de poner algo en el almacén temporal:
Es posible que este enfoque sea preferible porque significa que puede usar un solo sistema para el almacenamiento temporal, independientemente de si un usuario ha iniciado sesión.
(Mis ejemplos de código se extraen más o menos textualmente de este excelente tutorial sobre cómo crear formularios de varios pasos ).
fuente
Una sesión puede ser anónima (uid = 0). Simplemente puede usar $ _SESSION y drupal se encargará de esto.
Almacenar datos de sesión:
Obtener datos de sesión:
Actualización 1: Objeto de sesión
Si bien todavía hay trabajo en el núcleo de D8, vea este problema Convierta los usos de $ _SESSION a la sesión de Symfony recuperada de la solicitud , puede usar el objeto de sesión en la solicitud para almacenar los datos de la sesión. Pero no lo mezcle, los datos que almacena con uno de estos métodos no están disponibles en el otro. Consulte esta respuesta para obtener más detalles sobre Drupal 8 y la gestión de sesiones :
Actualización 2: TempStore
El TempStore parece ser muy popular en D8. Pero es demasiado complicado almacenar algunos valores como en esta pregunta. Está destinado a grandes fragmentos de datos, como por ejemplo datos de vista previa o vistas no guardadas. Aquí están los registros de cambios oficiales:
Acceda a los datos de la sesión a través del objeto Solicitud
Se agregó la API TempStore para el almacenamiento persistente y expirable de datos que no son de caché
fuente
El
$this->sessionManager->start();
ya no funcionaba para mí, porque de su última actualización. Lo cambié a$this->sessionManager->regenerate();
fuente