您的配置文件不可序列化

时间:2018-08-28 20:10:01

标签: laravel-5 config

我跑了

php artisan config:cache

在我的终端上,我得到了LogicException

LogicException  : Your configuration files are not serializable.

at C:\xampp\htdocs\penschool\vendor\laravel\framework\src\Illuminate\Foundation\Console\ConfigCacheCommand.php:68

 64|             require $configPath;
 65|         } catch (Throwable $e) {
 66|             $this->files->delete($configPath);
 67|
 68|             throw new LogicException('Your configuration files are not serializable.', 0, $e);
 69|         }
 70|
 71|         $this->info('Configuration cached successfully!');
 72|     }

 Exception trace:

1   Error::("Call to undefined method Closure::__set_state()")
  C:\xampp\htdocs\penschool\bootstrap\cache\config.php:241

2   require()
  C:\xampp\htdocs\penschool\vendor\laravel\framework\src\Illuminate\Foundation\Console\ConfigCacheCommand.php:64

Please use the argument -v to see more details.

在运行此命令之前,我从未遇到此错误。请任何帮助将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:2)

Laravel和PHP一般都不允许闭包序列化。在配置文件中查找使用了Closures的任何文件,然后使用传统功能重写该代码段。

答案 1 :(得分:1)

要找出问题的确切出处,可以暂时将$this->files->delete($configPath);vendor/laravel/framework/src/Illuminate/Foundation/Console/ConfigCacheCommand.php中删除。这样做bootstrap/cache/config.php不会被自动删除,您可以在config.php文件中查找提到的行(此处为241)。

答案 2 :(得分:0)

我找到了解决类似错误的方法。

我发现我的错误与/config/sluggable.php文件(用于管理已安装的插件的软件包的)中的关闭有关。

我的代码如下:

return [
    reserved => function(Model $model){
        return HelperController::reservedSlugs();
    }
];

我做了以下测试,以检查是否是造成此问题的原因:

return [
   reserved => array()
]

然后我运行了php artisan optimize。不再有问题-我发现了导致问题的关闭。

因此,代替原始的闭合,我做了以下操作以获得相同的结果:

$ reservedSlugs = HelperController :: reservedSlugs();

return [
    'reserved' => $reservedSlugs
];

答案 3 :(得分:0)

当我运行PHP 7.2升级到7.4时,这发生在我身上。