mkiselev / yii2-serialize-attribute-behavior
Yii2 序列化属性行为
v1.0.0
2017-01-18 20:03 UTC
Requires
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-29 00:57:22 UTC
README
这个 Yii 2.0 ActiveRecord 行为允许你在属性中存储序列化值。
安装
安装此扩展的首选方法是使用 composer。
运行以下命令之一
php composer.phar require --prefer-dist mkiselev/yii2-serialize-attribute-behavior "*"
或者在您的 composer.json 文件的 require 部分添加以下内容
"mkiselev/yii2-serialize-attribute-behavior": "*"
使用方法
行为会给您的 ActiveRecord 类添加一个名为 "$attribute . $unserializedAttributeSuffix" 的属性。
您可以像这样获取未序列化的属性值:$model->propertyArray。
您可以像这样设置未序列化的属性值:$model->propertyArray = []。
基本
如果您只想序列化和反序列化属性,可以使用以下配置
public function behaviors() { return [ ... [ 'class' => SerializeAttributeBehavior::className(), 'attribute' => 'data', 'unserializedAttributeSuffix' => 'Array', ], ... ]; }
高级
如果您需要更灵活的逻辑,您可以按如下配置行为
public function behaviors() { return [ ... [ 'class' => SerializeAttributeBehavior::className(), 'attribute' => 'data', 'unserializedAttributeSuffix' => 'Model', // MyModel must extend mkiselev\serialized\Model 'setAttributesToModel' => MyModel::className(), 'setAttributesToModelSafeOnly' => true, // serializerClass must implements mkiselev\serialized\interfaces\SerializerInterface 'serializerClass' => MySerializer::className(), ], ... ]; }
在上面的例子中,MyModel 必须包含属性、规则等,以便支持 ActiveField 属性的反序列化。
例如
<?= $form->field($model, 'activeRecordModelAttribute')->textInput(); ?> <?= $form->field($model->dataModel, 'MyModelAttribute')->textInput(); ?>
使用场景
- 此行为主要针对 PostgreSQL 和 MariaDB 列中的 JSON 使用。
- 您可以使用它将任何序列化数据作为文本存储。