Laravel将数组存储在会话中
问题出现的原因是因为在会话中存储了一个数组,而{{ }}
期望一个字符串,所以不能使用{{Session::get('cart')}}
来显示该值。
{{ $var }}
与echo htmlentities($var)
是相同的(一个非常简单的例子)。
解决方法是通过以下方式进行操作:
foreach(Session::get('cart') as $product_id) {{$product_id}}
我好奇为什么可以通过{{ }}来使用collections或者$request->all()?不是应该通过htmlentities来处理吗?
Collections提供了一个用于处理数组的包装器。如果你尝试echo $collection
或者使用{{ $collection }}
,Collection会自动使用__toString()
方法来处理。而$request->all()
会被处理为一个Collection,而不是一个普通的数组。
问题出现的原因:使用'push'方法在session中创建数组时,会导致数组的结构不正确。
解决方法:应该使用'put'方法来初始化数组,并使用'push'方法将后续的值添加到session数组中。
文章内容如下:
如果您在session中使用'push'方法来创建数组,那么数组的结构将会不正确,如下所示:
[ 0 => [1,2,3,4] ]
相反,您应该使用'put'方法来初始化数组:
$products = [1,2,3,4]; $request->session()->put('cart', $products);
任何后续的值都应该使用'push'方法添加到session数组中:
$request->session()->push('cart', 5);
非常正确,感谢您的指出。我已经纠正了代码。