会话中的Laravel商店数组

时间:2016-05-20 05:26:19

标签: php laravel laravel-5.2

我在会话中存储数组时遇到了问题。我正在制作一个购物车,它似乎不起作用。

public function __construct(){

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

}

然后在这样的视图中检索它。

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

但是我一直收到这样的错误。

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

有关如何创建存储项目数组的购物车的任何线索和建议。

6 个答案:

答案 0 :(得分:14)

如果您需要将session中的数组用作字符串,则需要使用Collection:

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

这将使您在htmls中使用{{Session::get('cart');}}时起作用。请注意Session::push,因为它会在会话中追加新产品。您应该使用Session::put来确保产品始终在更新。

答案 1 :(得分:4)

您在会话中存储数组,并且由于{{ }}需要字符串,因此您无法使用{{Session::get('cart')}}来显示该值。

{{ $var }}与撰写echo htmlentities($var)(一个非常简单的示例)相同。

相反,你可以这样做:

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

答案 2 :(得分:1)

如果使用'push',最初在会话中创建数组时,数组将如下所示:

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

相反,你应该使用'put':

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

任何后续值都应该推送到会话数组:

$request->session()->push('cart', 5);

答案 3 :(得分:1)

您可以使用.

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

答案 4 :(得分:0)

您可以在会话中声明一个数组,例如     $cart = session('data', []);

$cart[] = $product;

session([ 'data' => $cart]);

return session('data', []);

答案 5 :(得分:0)

你也可以这样做:

  $data = collect($Array); 
  Session()->put('data', $data);
  return view('pagename');