我尝试在中间件中设置标头,以避免谷歌机器人索引像登录页面这样的东西。我实际上让它工作但遇到了这个我无法理解的错误。
public function handle($request, Closure $next)
{
$next($request)->header('x-robots-tag', 'none', false);
return $next($request);
}
上面的代码不会在下面的代码中添加此标头x-robots-tag: none
。
public function handle($request, Closure $next)
{
$response = $next($request);
$response->header('x-robots-tag', 'none', false);
return $response;
}
它基本上是一回事吗?唯一的区别是将$next($request)
放入变量中。这是为什么?
答案 0 :(得分:4)
让我们来看看第二个版本:
public function handle($request, Closure $next)
{
$response = $next($request); //You get the Response instance and store it
$response->header('x-robots-tag', 'none', false); //you set the header
return $response; //and then you return it
}
,而
public function handle($request, Closure $next)
{
$next($request)->header('x-robots-tag', 'none', false);//You set the header to the response
return $next($request);// Here you get another instance thus the previous result is lost
}
想象一下$next($request)
就像一个工厂。