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

Php 如何从yii2-widget-select2获取数据,php,yii2,jquery-select2,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' => ['placehol

这是我第一次使用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,
        ]);
    }   
}
所以,在子表中,我将水果属性设置为varchar(255)。运行代码后,我从kartik小部件中选择了水果数据的所有标记,但它只在水果属性中保存“[]”

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

我假设您在模型中为用于填充
Select2
标记声明了一个自定义字段。因为您没有使用同一字段在这一行的
actionCreate
中加载模型

$model->fruit=json_encode($model->tag);
要使用
选择2
单模式或多模式,您不需要以数组的形式提供输入名称,即只需使用
标记

$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,
        ]);

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

public $tag;
标记
属性添加规则。下面的例子

[['tag'], 'safe']

$model->load($data)
仅填充已定义规则的属性

我假设您在模型中为用于填充
Select2
标记声明了一个自定义字段。因为您没有使用同一字段在这一行的
actionCreate
中加载模型

$model->fruit=json_encode($model->tag);
要使用
选择2
单模式或多模式,您不需要以数组的形式提供输入名称,即只需使用
标记

$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,
        ]);

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

public $tag;
标记
属性添加规则。下面的例子

[['tag'], 'safe']

$model->load($data)
仅填充已定义规则的属性

您可以转储Yii::$app->request->post()并检查是否提交了数据。如果有“标记”的数据,则检查是否在ChildData模型中有“标记”的规则?您可以转储Yii::$app->request->post(),并检查是否提交了数据。如果有“tag”的数据,那么检查是否在ChildData模型中有“tag”的规则?这是我的模型类,public$tag=[];公共函数规则(),'user_id'=>Yii::t('frontend/child_data','user id'),'fruit'=>Yii::t('frontend/child_data','fruit'),];}我已经更新了我的答案,如果它仍然不起作用,请告诉我。它起作用了!!!如上所述,我在模型中为$tag添加了规则。现在,select2中选定的数据保存在数据库中。非常感谢您的帮助@IrfanAshraf。这是我的模型类,public$tag=[];公共函数规则(),'user_id'=>Yii::t('frontend/child_data','user id'),'fruit'=>Yii::t('frontend/child_data','fruit'),];}我已经更新了我的答案,如果它仍然不起作用,请告诉我。它起作用了!!!如上所述,我在模型中为$tag添加了规则。现在,select2中选定的数据保存在数据库中。非常感谢您的帮助@IrfanAshraf。