Laravel中$this->app->isProduction()方法未检测到问题求助
解决Laravel中
isProduction()方法未找到的问题 针对你在配置preventLazyLoading时遇到的isProduction()方法不存在的异常,提供以下几种可行的解决方案:
方案1:使用App门面/全局辅助函数调用
修改boot方法中的代码,改用全局辅助函数或App门面来调用环境判断方法:
// 方式1:使用全局辅助函数 Model::preventLazyLoading(! app()->isProduction()); // 方式2:使用App门面(需引入命名空间) use Illuminate\Support\Facades\App; Model::preventLazyLoading(! App::isProduction());
方案2:直接读取配置文件中的环境值
通过config辅助函数读取app.env配置,这种方式不受容器实例类型影响,兼容性更强:
Model::preventLazyLoading(! (config('app.env') === 'production'));
方案3:排查容器实例类型
如果坚持使用$this->app,可以先确认容器实例是否为标准的Application类。在boot方法中临时添加打印代码排查:
dd(get_class($this->app));
若输出不是Illuminate\Foundation\Application,说明服务容器实例被意外替换,可尝试排查自定义服务提供者的冲突,或重新生成容器实例。
补充说明
$this->app在ServiceProvider中默认是Illuminate\Foundation\Application实例,该类原生实现了isProduction()方法。出现找不到方法的异常,大概率是容器实例被篡改,或是使用了低于Laravel 5.5的版本(该方法在5.5版本后引入)。如果是版本问题,建议升级到对应稳定版本。
内容的提问来源于stack exchange,提问作者Nay Aung Lin
相关产品推荐
相关产品推荐

