不是所有 Response 类都有 header () 方法
在做一个 Excel 导出,用的 maatwebsite/excel 扩展包,直接下载的方式,之前也用过,像往常一样一切准备就绪后,测试下效果,居然报个 header 方法不存在:
Call to undefined method Symfony\Component\HttpFoundation\BinaryFileResponse::header()
当时我就有点懵,我都用这么多次了,头一次遇到这个提示,哪儿来的,然后发现是个定义的中间件:
$response->header('Access-Control-Allow-Origin', '*');
心想怎么会呢,不过我还是选择多看一眼,
首先看到的是 ResponseFactory
中有:
Illuminate\Http\Response
Illuminate\HttpJsonResponse
Symfony\Component\HttpFoundation\StreamedResponse
Symfony\Component\HttpFoundation\BinaryFileResponse
他们共有的基类是 Symfony\Component\HttpFoundation\Response
,但是只有前面两个 use Illuminate\Http\ResponseTrait
,而 header
方法在这个 trait 里:
/**
* Set a header on the Response.
*
* @param string $key
* @param array|string $values
* @param bool $replace
* @return $this
*/
public function header($key, $values, $replace = true)
{
$this->headers->set($key, $values, $replace);
return $this;
}
于是我毅然决然的把中间件里的方式改成 $response->headers->set('Access-Control-Allow-Origin', '*');
,之后就正常的返回。
结论
不是所有 Response
类都有 header()
方法,如果在外层对 response 添加 header 项一定要尽可能满足所有情况(当然这个是自己维护的项目,想怎么改就怎么改)。
本作品采用《CC 协议》,转载必须注明作者和本文链接
? 我的导航网站已经可以公开使用啦:Cootab ✨
推荐文章: