服务提供者延迟加载的坑
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()
实例一个对象时报错了,是还没注册的原因。很抓狂,有哪位大佬能说说这延迟加载正确使用方式吗?
推荐文章: