2017-02-21 7 views
0

IDのコンマ区切り値を格納した列(属性)を持つモデルを持っています。 40,20,1,3Yii2:Kartik Select2:モデル属性からの初期値

はどのようにするとき「複数の」区切り、これらの値を表示するようにSelectセレクトウィジェットを使用することができます。たとえば

は、 映画、複数のジャンル、例えばを含み、列「ジャンル」を持っています=> true

カンマ区切りの値に文字列として保存するにはどうすればよいですか?迅速な柔軟性を可能にするソリューションが必要です。ストリングを爆破して爆発させることはできますが、あまりにも多くのように見えます。

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'); 

これは、ここで塩FO穀物のためにメモリからです。私が正しくウィジェットの$オプション構成の一部として、デフォルトのオプションを渡す覚えていれば

すべてのヘルプは

答えて

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は配列としてカンマ区切りのフィールドから値を保持します。もちろん、検証ルールを追加し、作成フォームや更新フォームで他の属性の代わりに使用する必要があります。

関連する問題