这是我第一次使用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小部件。 谢谢。
答案 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)
仅填充那些定义了规则的属性。