Ich arbeite an einem Geschäft und für den Einkaufswagen muss ich Artikel vor der Zahlung lagern.
$tempstore = \Drupal::service('user.private_tempstore')->get('boutique');
$tempstore->set('poids', $form_state->getValue('poids'));
Ich schaue im User Service nach:
pivate_tempstore und shared_tempstore
Dies funktioniert jedoch nur für authentifizierte Benutzer.
Was kann ich für Geschäftsdaten verwenden? $ _SESSION? oder hat Drupal 8 einen Service dafür?
Antworten:
In Drupal 8 kann auf die Sitzungsvariablen über die Anforderung zugegriffen werden:
Wenn Sie in der Sitzung etwas festlegen möchten, können Sie Folgendes tun:
Oder um eine Sitzungsvariable abzurufen:
quelle
Späte Beantwortung, aber im Wert darauf zu erwähnen , dass Sie können Privat tempstore für anonyme Benutzer verwenden, solange die tempstore Zugang zu einer aktiven Sitzung hat. Dazu müssen Sie Ihrer Klasse Dienste für den temporären Speicher, die Sitzung und den aktuellen Benutzer hinzufügen.
Dann müssen Sie nur sicherstellen, dass Sie den Sitzungsmanager starten, wenn der Benutzer anonym ist, bevor Sie etwas in den temporären Speicher legen müssen:
Möglicherweise ist dieser Ansatz vorzuziehen, da Sie ein einzelnes System für die temporäre Speicherung verwenden können, unabhängig davon, ob ein Benutzer angemeldet ist.
(My Codebeispiele werden angehoben mehr oder weniger wörtlich aus diesen hervorragenden Tutorial auf dem Aufbau mehrstufiger Formen .)
quelle
Eine Sitzung kann anonym sein (UID = 0). Sie können einfach $ _SESSION verwenden und Drupal kümmert sich darum.
Sitzungsdaten speichern:
Sitzungsdaten abrufen:
Update 1: Sitzungsobjekt
Während im D8-Kern noch Arbeiten ausgeführt werden, siehe dieses Problem Konvertieren von Verwendungen von $ _SESSION in Symfony-Sitzung, die aus der Anforderung abgerufen wurden. Sie können das Sitzungsobjekt in der Anforderung zum Speichern von Sitzungsdaten verwenden. Aber nicht mischen, Daten, die Sie mit einer dieser Methoden speichern, sind in der anderen nicht verfügbar. In dieser Antwort finden Sie weitere Informationen zu Drupal 8 und Sitzungsverwaltung :
Update 2: TempStore
Der TempStore scheint in D8 sehr beliebt zu sein. Es ist jedoch zu kompliziert, einige Werte wie in dieser Frage zu speichern. Es ist für große Datenmengen wie zum Beispiel Vorschaudaten oder nicht gespeicherte Ansichten gedacht. Hier sind die offiziellen Änderungsnachweise:
Greifen Sie über das Request-Objekt auf Sitzungsdaten zu
Die TempStore-API wurde für die dauerhafte, ablaufende Speicherung von Nicht-Cache-Daten hinzugefügt
quelle
Das hat
$this->sessionManager->start();
bei mir wegen des letzten Updates nicht mehr funktioniert. Ich habe es in geändert$this->sessionManager->regenerate();
quelle