代码之家  ›  专栏  ›  技术社区  ›  Zoe

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

  •  0
  • Zoe  · 技术社区  · 7 年前

    这是我第一次使用yii框架,并尝试在视图中使用kratik小部件。 以\u形式。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'); ?>
    

    我想从控制器获取所选数据。这是我的控制器。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小部件中选择了水果数据的所有标记,但它只在水果属性中保存“[]”。

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Irfan Ashraf    7 年前

    我假设您在模型中为 tag 用于填充 Select2 . 因为您没有使用相同的字段在内部加载模型 actionCreate 在这条线上。

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

    使用he 选择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,
            ]);
    
    }
    

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

    public $tag;
    

    为添加规则 标签 属性下面的示例

    [['tag'], 'safe']
    

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