laravel报错Call to undefined method Symfony\Component\HttpFoundation\BinaryFileResponse::header()

本文主要是介绍laravel报错Call to undefined method Symfony\Component\HttpFoundation\BinaryFileResponse::header(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在中间件中使用了

$response->header('Access-Control-Allow-Origin', '*');$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN');$response->header('Access-Control-Expose-Headers', 'Authorization, authenticated');$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');$response->header('Access-Control-Allow-Credentials', 'true');

所以在使用laravel-excel做excel导出的时候,使用下载,报Call to undefined method Symfony\Component\HttpFoundation\BinaryFileResponse::header()这个错误。

看了laravel文档,说下载文件用

return response()->download($pathToFile);
return response()->download($pathToFile, $name, $headers);
return response()->download($pathToFile)->deleteFileAfterSend(true);

看来下源码,是用的这个

 public function download($export, string $fileName, string $writerType = null, array $headers = []){return response()->download($this->export($export, $fileName, $writerType)->getLocalPath(),$fileName,$headers)->deleteFileAfterSend(true);}

然后网上看了下,说原因是

$response是Illuminate\Http\Response类的一个实例,而Passport实际上使用的是Symfony\Component\HttpFoundation\Response类响应消息

通过查看源码,发现

Illuminate\Http\Response使用了Illuminate\Http\ResponseTrait,而header就是在这里定义的

public function header($key, $values, $replace = true){$this->headers->set($key, $values, $replace);return $this;}

再查看Symfony\Component\HttpFoundation\Response的源码,发现,里面的header是这样的

$this->headers = new ResponseHeaderBag($headers);

查看use Symfony\Component\HttpFoundation\HeaderBag;的源码,这里是处理header的一个类,而Illuminate\Http\ResponseTrait在处理header时也是用的这个,

public function withHeaders($headers){if ($headers instanceof HeaderBag) {$headers = $headers->all();}foreach ($headers as $key => $value) {$this->headers->set($key, $value);}return $this;}

 

所以从上面的代码看出,我们可以直接使用

$this->headers->set($key, $values, $replace);

那么在中间件中就可以这样用

$response->headers->set('Access-Control-Allow-Origin', '*');$response->headers->set('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN');$response->headers->set('Access-Control-Expose-Headers', 'Authorization, authenticated');$response->headers->set('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');$response->headers->set('Access-Control-Allow-Credentials', 'true');

 

这篇关于laravel报错Call to undefined method Symfony\Component\HttpFoundation\BinaryFileResponse::header()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/802367

相关文章

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

AutoGen Function Call 函数调用解析(一)

目录 一、AutoGen Function Call 1.1 register_for_llm 注册调用 1.2 register_for_execution 注册执行 1.3 三种注册方法 1.3.1 函数定义和注册分开 1.3.2 定义函数时注册 1.3.3  register_function 函数注册 二、实例 本文主要对 AutoGen Function Call

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At