运行php artisan config:cache提示配置文件不可序列化如何解决
问题根因说明
这个报错是因为php artisan config:cache执行时,会通过var_export()序列化所有配置项后写入缓存文件,后续加载缓存时会调用导出类的__set_state()静态方法完成实例重建,你项目里的Modules\Language\Entities\LanguageConfig 实体类被写入了配置项,但没有定义该方法导致重建失败。
修复步骤
- 第一步:先排查所有配置文件(
config/目录下所有php文件、模块自定义配置文件),找到直接把LanguageConfig类实例作为配置值返回的代码配置文件中只允许返回标量、数组、null这类可原生序列化的数据,不应该直接存放ORM实体、资源对象、闭包这类不可序列化的内容,优先调整这部分逻辑:比如把
LanguageConfig实例化逻辑挪到业务代码里,配置里只存必要的参数 - 第二步:如果确实需要在配置中保留该类实例,给
Modules\Language\Entities\LanguageConfig类添加__set_state()静态方法,示例代码如下:
public static function __set_state($array) { $obj = new self; foreach ($array as $property => $value) { $obj->$property = $value; } return $obj; }
- 第三步:清理旧缓存后重新生成配置缓存
依次执行以下命令:php artisan config:clear php artisan cache:clear php artisan config:cache
验证
执行完上述命令后如果没有抛出异常即修复完成,可正常执行其他artisan命令。
内容的提问来源于stack exchange,提问作者tayeb320
相关产品推荐
相关产品推荐

