Yii2 CSV文本字段到多个选择dropDownList

时间:2016-07-31 00:40:52

标签: php yii2 yii2-model

有一个名为path的数据库字段,它是文本类型,用于存储将字符串标记为CSV的路径,如下所示:

*:*,site/about,site/* 最初,它用作文本输入字段,如下所示:

<?= $form->field($model, 'path')->textarea(['rows' => 6]) ?>

我想暂时将这些路径转换为视图中的dropDownSelect列表,然后在控制器中我将所选项目再次内爆为字符串以进行验证和保存。

视图 _form.php中,我有以下内容:

<?= $form->field($model, 'path')->dropDownList($model->getPathSelectList($model->path), ['multiple' => 'multiple']) ?>

控制器

public function actionCreate()
    {
        $model = new StaticHtml();
        // var_dump($model->path);
        // die();
        if (is_array($model->path)) $model->path = implode(',', $model->path);

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            $model->path = $model->getPathsList(Yii::$app->getRequest()->getQueryParam('path'));
            return $this->render('create', [
                'model' => $model,              
            ]);
        }
    }

请注意两个注释行 var_dump($model->path)die()我将它们设置为调试,因为每次我从dropDownList中选择并提交表单时,验证都会失败,告诉我Path must be a string,当然没有任何保留选择,与其他字段不同,var_dump($model->path)打印NULL

enter image description here

在上面的代码中,有两种模型的方法:

  1. getPathsList()从控制器调用它,它将初始路径转换为路径标记,并将它们设置为csv string。
  2. 在视图中
  3. getPathSelectList,它将csv转换为关联数组,其键和值等于每一个都是dropDownList字段的数据列表。
  4. 直到这一点,我认为更新需要更多,但是,我的代码中有什么问题阻止发布$model->path,因此它会NULLvar_dump()?< / p>

    我很确定从表单接收数据是一个问题,因为我试图:

    var_dump(Yii::$app->getRequest()->post('path'));
    var_dump(Yii::$app->getRequest()->post('title')); 
    var_dump(Yii::$app->request->post('path'));
    

    并且所有这些都返回NULL

1 个答案:

答案 0 :(得分:0)

如果您的验证规则可以添加

skipOnEmpty => true

否则你可以用这种方式覆盖支票

['path', 'required', 'isEmpty' => function ($value) {
    return empty($value);
}]