服务提供者延迟加载的坑

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3
lufeijun1234

这个问题现在找到原因了么,求解

4年前 评论
lufeijun1234

延迟服务提供者需要一个 provides 函数,返回一个数组字符串,当 App::make() 的参数在这个数组中时,系统会先调用延迟加载函数,在进行解析。

4年前 评论

md 也踩了一次 php artisan clear-compiled都报错 一定要手动删~

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!