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

相关文章

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于