Laravel 的 Storage::download() 方法底层是如何运行的?
Laravel
Storage::download() 方法实现原理 你在Storage Facade以及其直接关联的基础类中找不到download()方法定义是正常情况,该方法是Laravel的宏扩展机制结合魔术方法实现的「动态」方法,具体执行流程如下:
Storage作为Facade门面类,静态调用的所有方法都会被转发到它代理的Illuminate\Filesystem\FilesystemManager实例,首先会解析你指定的磁盘对应的Illuminate\Filesystem\FilesystemAdapter实例FilesystemAdapter类本身没有声明download()这个公共方法,但是它实现了PHP的__call()魔术方法,当调用类中不存在的方法时,会优先检查该方法是否已经通过宏机制注册到类上download()是Laravel在框架启动阶段,通过macro()方法注册到FilesystemAdapter的扩展方法,核心逻辑是封装了HTTP下载响应的头信息构造、文件内容读取逻辑,类同的putFile、putFileAs等常用Storage方法也都是通过该方式注册的
小提示:如果需要查看
download()的具体实现源码,可以在Illuminate\Filesystem\FilesystemAdapter类的相关宏注册逻辑中检索,或是查找框架文件系统服务提供者的扩展注册代码。
内容的提问来源于stack exchange,提问作者владимир зайцев
相关产品推荐
相关产品推荐

