我已将laravel版本从5.5更新到5.6,并遵循了更新指南,但有一个我无法弄清的错误。
错误
Argument 2 passed to Symfony\Component\HttpFoundation\Cookie::__construct() must be of the type string or null, array given
我的代码生成此错误:
public function show($id, DealService $dealService, CookieJar $cookieJar)
{
if(null != $coupon = $dealService->getActiveDealById($id))
{
if(!Cookie::has('recent'))
{
$ids = [];
array_unshift($ids, $id);
$cookieJar->queue('recent', $ids);
}
else
{
$ids = Cookie::get('recent');
if(!in_array($id, $ids))
{
array_unshift($ids, $id);
$ids[] = $id;
$cookieJar->queue('recent', $ids);
}
}
if(!empty($ids))
{
$recent_deals = $dealService->getDealsByIds($ids);
}
$related_deals = $dealService->getRelatedActiveDeals($id);
return view('couponia.show', ['coupon' => $coupon, 'recent_deals' => $recent_deals, 'related_deals' => $related_deals]);
}
else
{
return view('errors.404');
}
}
CookieJar队列方法在尝试创建Cookie实例时会引发异常,但是此代码过去在5.5中可以正常工作,并且CookieJar文档还建议它接受数组作为参数。
答案 0 :(得分:0)
问题在于更新后,Symphony库也已更新到版本3.3,该版本不再支持数组cookie。此时,解决方案可能是先序列化数组,然后再反序列化。