我在会话中存储数组时遇到了问题。我正在制作一个购物车,它似乎不起作用。
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
有关如何创建存储项目数组的购物车的任何线索和建议。
答案 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');