Je travaille sur une boutique et pour le panier, j'ai besoin de stocker des articles avant le paiement.
$tempstore = \Drupal::service('user.private_tempstore')->get('boutique');
$tempstore->set('poids', $form_state->getValue('poids'));
Je jette un œil sur le service utilisateur pour:
pivate_tempstore et shared_tempstore
Mais cela ne fonctionne que pour les utilisateurs authentifiés.
Que puis-je utiliser pour stocker des données? $ _SESSION? ou Drupal 8 a un service pour ça?
Réponses:
Dans Drupal 8, les variables de session sont accessibles depuis la demande:
Si vous souhaitez définir quelque chose dans la session, vous pouvez effectuer les opérations suivantes:
Ou pour récupérer une variable de session:
la source
Réponse tardive, mais il convient de mentionner que vous pouvez utiliser le magasin temporaire privé pour les utilisateurs anonymes, tant que le magasin temporaire a accès à une session active. Pour ce faire, vous devez injecter votre classe avec des services pour le magasin temporaire, la session et l'utilisateur actuel, comme suit:
Ensuite, vous devez simplement vous assurer de démarrer le gestionnaire de sessions si l'utilisateur est anonyme, avant de mettre quoi que ce soit dans le magasin temporaire:
Cette approche peut être préférable car elle signifie que vous pouvez utiliser un seul système pour le stockage temporaire, qu'un utilisateur soit connecté ou non.
(Mes exemples de code sont extraits plus ou moins textuellement de cet excellent didacticiel sur la création de formulaires en plusieurs étapes .)
la source
Une session peut être anonyme (uid = 0). Vous pouvez simplement utiliser $ _SESSION et drupal s'en chargera.
Stocker les données de session:
Obtenez les données de session:
Mise à jour 1: objet de session
Bien qu'il y ait encore du travail en cours dans le noyau D8, consultez ce problème Convertir les utilisations de $ _SESSION en session symfony récupérée de la demande , vous pouvez utiliser l'objet de session dans la demande pour stocker les données de session. Mais ne le mélangez pas, les données que vous stockez avec l'une de ces méthodes ne sont pas disponibles dans l'autre. Voir cette réponse pour plus de détails sur Drupal 8 et la gestion de session :
Mise à jour 2: TempStore
Le TempStore semble être très populaire en D8. Mais c'est trop compliqué de stocker des valeurs comme dans cette question. Il est destiné à de gros morceaux de données comme par exemple des données d'aperçu ou des vues non enregistrées. Voici les enregistrements des changements officiels:
Accéder aux données de session via l'objet Request
API TempStore ajoutée pour le stockage persistant et expirable des données non-cache
la source
Le
$this->sessionManager->start();
ne fonctionnait plus pour moi à cause de la dernière mise à jour. Je l'ai changé en$this->sessionManager->regenerate();
la source