Yii2:Kartik Select2:模型属性的初始值

时间:2017-02-21 12:21:11

标签: csv model yii2 select2 kartik-v

我有一个模型,其列(属性)存储了逗号分隔的ID值。

例如, 电影有一个列“流派”,包括一个以上的流派,例如:40,20,1,3

当'multiple'=>时,如何使用Select2小部件显示这些值。真

如何将它们保存为逗号分隔值作为字符串。我想要一个能够快速灵活的解决方案。我知道你可以内爆并爆炸但看起来太多了。

任何帮助表示赞赏

3 个答案:

答案 0 :(得分:0)

如果我没记错,请将默认选项作为小部件的$ options配置的一部分传递:

echo $form->field($model, 'model_attribute_name')->widget(Select2::className(), [
    'data'      => $data
    'options'   => [
            'class'       => 'form-control',
            'placeholder' => 'Choose Option...',
            'selected'    => 40 
    ],
    'pluginOptions' => [
        'allowClear' => true,
    ],
])->label('Select2 Form Field');

这是来自谷物盐的记忆。 http://demos.krajee.com/widget-details/select2上的文档对于如何执行此操作并不十分具体。

答案 1 :(得分:0)

我不相信你能做到这一点。 Select2将数据作为数组发送到post,因此在保存之前仍需要使用implode。我要做的是在你的模型类中:

class MyModel extends \yii\db\ActiveRecord {
    $public myArrayAttribute;

    ...

    public function beforeSave($insert) {
        if (parent::beforeSave($insert)) {
            $this->myAttribute = implode(',', $this->myArrayAttribute);
            return true;
        }
        return false;
    }

    public function afterFind() {
        parent::afterFind();
         $this->myArrayAttribute = explode(',', $this->myAttribute);
    }
}

这种方式myArrayAttribute将逗号分隔字段中的值保存为数组。当然,您需要为其添加验证规则,并在创建和更新表单中使用它而不是其他属性。

答案 2 :(得分:0)

如果您要显示已填充字段的表单,也许您想更新一个已经存在的对象,并且您想显示 Select2 字段的已保存值,请使用 'data' => [ 1 => '某个值'],其中 1 是与表单中显示的值相关联的值。您可以预先从数据库中检索要放入数据的东西。

来源:https://github.com/kartik-v/yii2-widget-select2/issues/37