我有中间件,在其中我将HTTP标头分配给请求/响应。
$response = $next($request)->header('x-robots-tag', 'noindex', false);
在中间件中,我还可以在执行上述操作后应用此行,以获取我刚刚设置的值...
echo $response->headers->get('x-robots-tag');
但是,我想在中间件之外访问它,但是我不确定如何获取Response对象来实现这一目标。
如何从控制器中获取$ response对象?
$response = \WHAT\GOES\HERE?;
echo $response->headers->get('x-robots-tag');
我似乎无法弄清楚要放入 \ WHAT \ GOES \ HERE 部分的内容,以便再次访问响应对象。
仍未解决,但部分问题似乎是为了将标头标签添加到中间件中的Response对象需要$next($request)
,而$ next Closure导致响应处理在控制器代码之后完成已执行。因此,即使我不确定如何从控制器内部定位Response对象,也要等到以后再分配header标签。
我可以使用以下中间件直接在PHP中设置标头
public function handle($request, Closure $next /*, $tags */)
{
$tags = array_except(func_get_args(), [0,1]);
if( count($tags) > 0){
header('x-robots-tag: ' . implode(', ', $tags));
}
return $next($request);
}
,然后通过将其从headers_list()
中拉出来在控制器中进行访问,但这并不理想,并且可以在laravel方式之外工作...
对于上下文,此想法是将中间件分配给路由,并使用中间件为x-robots-tag
响应头分配所需的属性。 noindex, nofollow
,无论如何……然后,我希望捕捉到这一点,并使用提供给x-robots-tag
的数据相应地填充等效的meta标签。两只鸟只用一种石头般的方法,但事实证明,这比我预期的要困难。