在中间件中设置标头

时间:2017-09-01 12:13:27

标签: php laravel

我尝试在中间件中设置标头,以避免谷歌机器人索引像登录页面这样的东西。我实际上让它工作但遇到了这个我无法理解的错误。

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)放入变量中。这是为什么?

1 个答案:

答案 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)就像一个工厂。