为什么 withCookie() 不起作用?

Why withCookie() is not working?

关于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;

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

在第一个选项中,您实际上并没有包括 cookie,而是一个名为 'cookie' 的参数,该参数恰好具有由函数 cookie 计算的值。我的意思是,您正在使用 View 的函数 withXXXX,它创建一个名为 XXXX 的参数。事实上,如果你包含类似

{{$cookie}}

在您的 blade 视图文件中,您将获得使用 cookie 函数生成的值。

所以,这就是它实际做的事情:将一个名为 cookie 的参数传递给视图构建器。

第二个有效,因为您使用的是 cookieJar 并且它会自动保留。

第三个有效,因为您使用的是 View 的 withCookie 函数 NOTResponse,它实际上创建了 returns 一块饼干。

TL;DR : You must add the cookie to the response, not to the view.