2016-09-14 7 views
1

Ich versuche, Sitzung im Controller zu schreiben. Meine Struktur istCakePHP 3 Wie Session-Array

$_SESSION['a'][0] = 1; 
$_SESSION['a'][1] = 2; 
$_SESSION['a'][2] = 3; 

Und ich versuche diese

Configure::write('Session', ['a' =>'1']) 

Aber es funktioniert nicht. Wie kann dies in cakephp 3-Wege

Antwort

5

Um Variable in Session in CakePHP 3 Sie schreiben müssen folgenden Code schreiben:

$this->request->session()->write('Your Key',Your_array); 

Um mehr Informationen kennen Sie hier besuchen können:

http://book.cakephp.org/3.0/en/development/sessions.html

+0

Es funktioniert, aber wenn ich einen anderen Wert anfügen überschreibt es anstelle von hinzufügen –

+1

Um zu schreiben, müssen Sie das Array aus Sitzung lesen und den neuen Wert an Array und dann wieder in die Sitzung für den gleichen Schlüssel schreiben. Weil nach CakePHP 3 Dokumentation Wert überschrieben wird, wenn Sie gleichen Schlüssel übergeben –

+0

Wenn dies für Sie funktioniert, dann vergessen Sie nicht, die Antwort zu akzeptieren –

2

Die Antwort ist, dass dies in CakePHP 3.x getan werden kann, nicht

In Vanille PHP ist es möglich, dies zu tun:

<?php 
    session_start(); 
    $_SESSION['a'][0] = 1; 
    $_SESSION['a'][1] = 2; 
    $_SESSION['a'][2] = 3; 
    var_dump($_SESSION); 
?> 

die Ausgang :

array(1) { 
    ["a"]=> array(3) { 
     [0]=> int(1) 
     [1]=> int(2) 
     [2]=> int(3) 
    } 
} 

Das ist richtig, und was sollte passieren.

In CakePHP können Sie keine Arrays im Sitzungsschlüssel angeben. Zum Beispiel:

$this->request->session()->write('a[]', 1); 
$this->request->session()->write('a[]', 2); 
$this->request->session()->write('a[]', 3); 

Funktioniert nicht. Wenn Sie die []entfernen, wird der Wert überschrieben. Zum Beispiel:

$this->request->session()->write('a', 1); 
$this->request->session()->write('a', 2); 
$this->request->session()->write('a', 3); 

Der Wert $this->request->session()->read('a') würde 3 sein. Die Werte 1 und 2 wurden überschrieben. Auch dies ist zu erwarten, da Sie den Schlüssel a jedes Mal überschreiben. Die äquivalente Vanille PHP hierfür ist:

$_SESSION['a'] = 1; 
$_SESSION['a'] = 2; 
$_SESSION['a'] = 3; 

Aufgrund des Fehlens eines indexierten Array $_SESSION['a'] jedes Mal überschrieben wird. Das ist normales Verhalten. Es müssen die Indizes (z. B. ['a'][0], ['a'][1], ...) funktionieren! Die anderen Antworten, wo sie Dinge wie key1 und key2 gegeben haben, sind nicht geeignet. Weil es viele Situationen gibt, in denen alles in einem indizierten Array enthalten sein soll. Das Generieren separater Schlüsselnamen ist für diese Art von Szenario falsch.