2016-05-20 3 views
3

Ich habe Probleme beim Speichern eines Arrays in Sitzung. Ich mache einen Einkaufswagen und es scheint nicht zu funktionieren.Laravel Store Array in Sitzung

public function __construct(){ 

    $product = array(1,2,3,4); 
    Session::push('cart', $product); 

} 

und dann in der Ansicht wie folgt abrufen.

{{Session::get('cart')}} 

Allerdings bekomme ich immer einen Fehler wie folgt.

Alle Hinweise und Ratschläge zum Erstellen eines Einkaufswagens, der eine Reihe von Artikeln speichert.

Antwort

12

Wenn Sie das Array aus Session als Zeichenkette verwenden müssen, müssen Sie Sammlung wie folgt verwenden:

$product = collect([1,2,3,4]); 
Session::push('cart', $product); 

Dadurch wird es funktioniert, wenn Sie {{Session::get('cart');}} in Ihren htmls verwenden. Achten Sie auf Session::push, da es immer die neuen Produkte in Sitzungen anfügt. Sie sollten Session::put verwenden, um sicherzustellen, dass die Produkte immer aktualisiert werden.

3

Sie speichern ein Array in der Sitzung, und da {{ }} eine Zeichenfolge erwartet, können Sie {{Session::get('cart')}} nicht verwenden, um den Wert anzuzeigen.

Die {{ $var }} ist das gleiche wie das Schreiben (ein sehr einfaches Beispiel).

Stattdessen könnten Sie etwas tun:

@foreach (Session::get('cart') as $product_id) 
    {{$product_id}} 
@endforeach 
+0

Ich war neugierig, warum Sammlungen oder $ request-> all() uns sein können durch {{}}? Geht nicht auch Htmlentities durch sie hindurch? – Nello

+1

@Nello Collections bietet einen Wrapper für die Arbeit mit Arrays. Wenn Sie versuchen, "echo $ collection" zu verwenden oder '{{$ collection}}' 'zu verwenden, behandelt die Collection dies automatisch mit einem [' __toString() '] (https://github.com/laravel/framework/blob/5.2 /src/Illuminate/Support/Collection.php#L1138-L1146) Methode. Die '$ request-> all()' würde als Sammlung anstatt als normales Array behandelt werden. –

0

Wenn Sie 'Push', wenn zunächst das Array in der Sitzung zu schaffen, dann wird das Array wie folgt aussehen:

[ 
    0 => [1,2,3,4] 
] 

Stattdessen sollten Sie 'setzen' verwenden:

$products = [1,2,3,4]; 
$request->put('cart', $products); 

Alle nachfolgenden Werte sollten in das Session-Array geschoben werden: