如何从yii2-widget-select2获取数据

时间:2018-01-30 08:55:47

标签: php yii2 jquery-select2

这是我第一次使用yii框架并尝试在视图中使用kratik小部件。 在_form.php中,

$data = [
"a" => "Apple",
"b" => "Banana",
"c" => "coconut",
];

$form->field($model, 'tag[]')->widget(Select2::classname(), [
        'data' => $data,
        'options' => ['placeholder' => 'choose category', 'multiple' => true],
        'pluginOptions' => [
        'tags' => true,
        'tokenSeparators' => [',', ' '],
        'maximumInputLength' => 10
        ],
    ])->label('Select Category'); ?>

我想从控制器中获取所选数据。这是我的controller.php,

public function actionCreate()
{
    $model = new ChildData();
    if ($model->load(Yii::$app->request->post())) {
        $userId = Yii::$app->user->getId();
        $model->user_id= $userId;
        $model->fruit=json_encode($model->tag);
        $model->save();

        return $this->redirect(['view', 'id' => $model->id]);

    } else {
        return $this->render('create', [
            'model' => $model,
        ]);
    }   
}

因此,在Child表中,我将fruit属性设置为varchar(255)。运行代码后,我从kartik小部件中选择了水果数据的所有标签,但它只在fruit属性中保存了“[]”。

因此,我想知道如何从controller.php中的kartik select2获取数据? kartik select2返回什么类型的数据?以及如何将所选数据传递给view.php?请随时指导我使用kartik小部件。 谢谢。

1 个答案:

答案 0 :(得分:2)

我假设您在模型中为tag声明了一个自定义字段,用于填充Select2。由于您没有使用相同的字段在此行actionCreate内加载模型。

$model->fruit=json_encode($model->tag);

要使用他Select2 Single或Multiple模式,您不需要将输入名称作为数组提供i-e只需使用tag

$form->field($model, 'tag')

将您的创建操作更改为以下内容,以便您获得验证错误。

public function actionCreate()
{
    $model = new ChildData();
    if ($model->load(Yii::$app->request->post())) {
        $userId = Yii::$app->user->getId();
        $model->user_id= $userId;
        $model->fruit=json_encode($model->tag);
        if($model->save()){
          return $this->redirect(['view', 'id' => $model->id]);
        } 

    } 
        return $this->render('create', [
            'model' => $model,
        ]);

}

也可以请分享您的model代码。必须为标记定义规则,否则将不会填充它。如果它不是数据库字段,则必须在模型i-e

中定义自定义属性
public $tag;

tag属性添加规则。以下示例

[['tag'], 'safe']

$model->load($data)仅填充那些定义了规则的属性。