Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么withCookie()不起作用?_Php_Laravel_Cookies_Laravel 5_Laravel 5.2 - Fatal编程技术网

Php 为什么withCookie()不起作用?

Php 为什么withCookie()不起作用?,php,laravel,cookies,laravel-5,laravel-5.2,Php,Laravel,Cookies,Laravel 5,Laravel 5.2,我遇到了无法使用Laravel 5.2设置cookie的问题,在阅读之后,问题已经解决(所以我需要的不是解决方案而是解释。) 总之, return view('welcome')->withCookie(cookie('test', 'test', 45000)); 这是行不通的,为了让它发挥作用,也要: public function index(CookieJar $cookieJar, Request $request) { if($request->refer

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

总之,

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');
 }
或:


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

在第一个选项中,您实际上没有包含cookie,而是包含一个名为“cookie”的参数,该参数的值恰好由函数
cookie
计算。我的意思是,您正在使用
视图
的函数
和XXXX
,它创建了一个名为XXXX的参数。事实上,如果你包括

{{$cookie}}

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

它实际上就是这样做的:将一个名为cookie的参数传递给视图生成器。

第二种方法很有效,因为您使用的是cookieJar,它会自动保存

第三种方法之所以有效,是因为您使用的withCookie函数不是
视图的,而是
响应的,它实际上创建并返回了一个cookie

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

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