Laravel将数组存储在会话中

8 浏览
0 Comments

Laravel将数组存储在会话中

我一直在尝试将一个数组存储在会话中,但遇到了问题。我正在制作一个购物车,但它似乎无法正常工作。

public function __construct(){
  $product = array(1,2,3,4);
  Session::push('cart', $product);
}

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

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

然而,我一直在收到以下错误。

htmlentities() 期望参数 1 是字符串,但得到的是数组

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

0
0 Comments

问题出现的原因是因为在会话中存储了一个数组,而{{ }}期望一个字符串,所以不能使用{{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,而不是一个普通的数组。

0
0 Comments

问题出现的原因:

当需要将会话中的数组作为字符串使用时,需要使用Collection来处理。

解决方法:

使用Session::push将数组存入会话中,并使用Session::get在html中使用。

示例代码:

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

需要注意的是,Session::push会在会话中一直追加新的产品。如果希望产品始终更新,应该使用Session::put

0
0 Comments

问题出现的原因:使用'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);

非常正确,感谢您的指出。我已经纠正了代码。

0