如何在 laravel 5.4 中存储数组 cookie?

Posted

技术标签:

【中文标题】如何在 laravel 5.4 中存储数组 cookie?【英文标题】:How to store array cookie in laravel 5.4? 【发布时间】:2017-12-05 22:18:52 【问题描述】:

我在 laravel 5.4 中有这个功能,但我得到了错误。

$cart[$product->id] = $quantity;
var_dump($cart);
return redirect('catalogs')->withCookie(cookie()->forever('cart', $cart));

var_dump($cart) 包含这个:

array(1)  [1]=> string(1) "1" 

错误警告:

Method Symfony\Component\HttpFoundation\Cookie::__toString() must not throw an exception, caught ErrorException: Array to string conversion

如果我只传递字符串值(而不是数组),它会成功。有没有办法在 Laravel 中存储数组 cookie?

谢谢。

【问题讨论】:

你试过序列化数组吗? 是的,serialize($cart) 就是答案。虽然我希望 Laravel 框架可以处理在 cookie 中存储数组。 【参考方案1】:

警告:不要使用序列化/反序列化 http://php.net/manual/en/function.unserialize.php#refsect1-function.unserialize-notes

您可以将其存储为 JSON

 $user=['name'=>'Imran','email'=>'xyz*emphasized text@gmail.com'];
 $array_json=json_encode($user);
 return redirect('user')->withCookie(cookie()->forever( 'user',$array_json, 450000));

检索时

 $user=\Cookie::get('user');
       $user=json_decode($user);
echo $user->name;
echo $user->email;

【讨论】:

【参考方案2】:

只有字符串可以存储在 cookie 中。所以试试这个:

$cart[$product->id] = $quantity;
var_dump($cart);
return redirect('catalogs')->withCookie(cookie()->forever('cart', serialize($cart)));

【讨论】:

好主意。感谢您解释只有字符串可以存储在 cookie 中,即使使用 Laravel 框架也是如此。谢谢。

以上是关于如何在 laravel 5.4 中存储数组 cookie?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4:如何验证图像大小?

Laravel 5.4:无法从关系中检索数据

在laravel 5.4(存储文件夹)中更改默认的“符号链接”文件夹

在 laravel 5.4 刀片中通过键从多维数组中获取值

DB::raw laravel 5.4 中的数组绑定在哪里

Laravel 5.4 AWS 服务器