mkiselev/yii2-serialize-attribute-behavior

Yii2 序列化属性行为

v1.0.0 2017-01-18 20:03 UTC

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 使用。
  • 您可以使用它将任何序列化数据作为文本存储。