传递给Symfony \ Component \ HttpFoundation \ Cookie :: __ construct()的参数2必须为字符串类型或null,给定数组

时间:2018-10-23 22:34:18

标签: php laravel laravel-5

我已将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文档还建议它接受数组作为参数。

1 个答案:

答案 0 :(得分:0)

问题在于更新后,Symphony库也已更新到版本3.3,该版本不再支持数组cookie。此时,解决方案可能是先序列化数组,然后再反序列化。