服务提供者延迟加载的坑
Laravel 是根据 bootstrap/cache/services.php
文件去决定如何注册 ServiceProvider的,而是否延迟加载则取决于第一次解析这个Provider文件时里面的protected $defer
等的配置。
如果一开始设置的是延迟加载,即protected $defer = true;
,那即便后来把这个属性设置为false
或是注释掉,那也不会改变 bootstrap/cache/services.php
文件里面的设置,可能导致相应的服务提供者未能在你需要时提前注册好(因为设置了延时加载,那个Provider文件还没运行)报未找到相应类的错误。
解决方法是执行php artisan clear-compiled
,清除旧的bootstrap/cache/services.php
文件。
实验中设置了延迟加载后,App::make()
实例一个对象时报错了,是还没注册的原因。很抓狂,有哪位大佬能说说这延迟加载正确使用方式吗?
这个问题现在找到原因了么,求解
延迟服务提供者需要一个 provides 函数,返回一个数组字符串,当 App::make() 的参数在这个数组中时,系统会先调用延迟加载函数,在进行解析。
md 也踩了一次 php artisan clear-compiled都报错 一定要手动删~