为什么withCookie()不起作用?

时间:2017-06-30 02:56:01

标签: php laravel cookies laravel-5 laravel-5.2

我遇到了无法使用Laravel 5.2设置cookie的问题,我在阅读this post后问题已经解决了。 (所以我需要的不是解决方案,而是解释。)

简而言之,

return view('welcome')->withCookie(cookie('test', 'test', 45000));

这不起作用,并使其有效:

 public function index(CookieJar $cookieJar, Request $request)
 {
     if($request->referrer){
        $cookieJar->queue(cookie('referrer', $request->referrer, 45000));
     }

     return view('welcome');
 }

或者:

$response = new \Illuminate\Http\Response(view('welcome'));
$response->withCookie(cookie('referrer', $request->referrer, 45000));
return $response;

让我烦恼的是,第一个代码在没有设置任何cookie的情况下不会返回任何错误,这意味着它实际上做了一些有效的事情(但没有设置cookie)。它实际上做了什么?为什么后两种解决方案有效?

1 个答案:

答案 0 :(得分:1)

在第一个选项中,您实际上并不包含Cookie,而是一个名为' cookie'的参数。碰巧有函数cookie计算的值。我的意思是,您正在使用withXXXX的函数View,它会创建一个名为XXXX的参数。事实上,如果你包括像

这样的东西
  

{{$饼干}}

在您的刀片视图文件中

,您将获得使用cookie函数生成的值。

那就是它实际上在做什么:将名为cookie的参数传递给视图构建器。

第二种方法有效,因为您正在使用cookieJar并且会自动保留。

第三种方法有效,因为您使用的是ViewResponse的withCookie函数 NOT ,它实际上会创建并返回一个Cookie。

  

TL; DR:您必须将cookie添加到响应中,而不是视图中。