web-dev-qa-db-fra.com

Laravel Stocker un tableau en session

J'ai eu du mal à stocker un tableau en session. Je fais un panier et ça ne semble pas fonctionner.

public function __construct(){

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

}

puis récupérez-le dans la vue comme ceci.

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

Cependant, je continue à avoir une erreur comme celle-ci.

htmlentities() expects parameter 1 to be string, array given

Tous les indices et conseils sur la création d'un panier d'achat contenant un grand nombre d'articles.

5
Nello

Si vous devez utiliser le tableau de session en tant que chaîne, vous devez utiliser Collection de la manière suivante:

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

Cela fonctionnera lorsque vous utiliserez {{Session::get('cart');}} dans vos fichiers HTML. Soyez conscient de Session::Push car il ajoutera toujours les nouveaux produits dans les sessions. Vous devriez utiliser Session::put pour vous assurer que les produits seront toujours mis à jour.

13
mvpasarel

Vous stockez un tableau dans la session et, puisque {{ }} attend une chaîne, vous ne pouvez pas utiliser {{Session::get('cart')}} pour afficher la valeur.

Le {{ $var }} est identique à l'écriture de echo htmlentities($var) (un exemple très simple). 

Au lieu de cela, vous pourriez faire quelque chose comme:

@foreach (Session::get('cart') as $product_id)
    {{$product_id}}
@endforeach
3
Kirk Beard

Si vous utilisez 'Push' lors de la création initiale du tableau dans la session, celui-ci se présentera ainsi:

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

Au lieu de cela, vous devriez utiliser 'put':

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

Toutes les valeurs suivantes doivent être placées sur le tableau de session:

$request->Push('cart', 5);
0
omarjebari