多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## Yii2 Serialization of 'Closure' is not allowed 错误 在开发中,使用Redis缓存服务器存储数据对象时,报错:“Serialization of 'Closure' is not allowed”, 其实也可以通过将对象转成数组的形式,再通过 `serialize()` 序列化存储到 Redis ,但是在类中写了一些关联操作,如果存储对象到数缓存中的话可以在循环数据的时候方便处理。报错如下: ![](https://box.kancloud.cn/b4f4d12bd263d591f4461744af36d291_881x643.png) 我以为是序列化的对象层级太深,想到数组嵌套有层次的限制,查找 php.ini 无果。 通过互联网搜索找到一个类似的情况。如下:https://laravel-china.org/topics/431 提供了一个思路,那就是可能在对象中有 **闭包函数**,其中报错中的 **Closure** 便是一个闭包。 来到类的定义文件中找到,如下代码: ``` public function behaviors() { return [ 'timestamp' => [ 'class' => TimestampBehavior::className(), 'attributes' => [ parent::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'], parent::EVENT_BEFORE_UPDATE => 'updated_at', ], 'value' => function () { return date('Y-m-d H:i:s', time()); }, ], ]; } ``` 以上代码是对对象的新增和更新时,更新数据库相关字段的。 于是,删除之,使用 Yii2 提供的 `afterSave()`解决。