有一个称为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
在上面的代码中,有两个模型的方法:
getPathsList()
它是从控制器调用的,它将初始路径转换为路径标记并将它们设置为 csv 字符串。getPathSelectList
在视图中,它将 csv 转换为一个关联数组,其键和值对于每个作为 dropDownList 字段的数据列表都是相等的。
到目前为止,我认为它需要更多的更新,但是,我的代码中有什么问题阻止发布它,$model->path
所以它打印NULL
出来var_dump()
?
我很确定从表单接收数据是一个问题,因为我试图:
var_dump(Yii::$app->getRequest()->post('path'));
var_dump(Yii::$app->getRequest()->post('title'));
var_dump(Yii::$app->request->post('path'));
并且它们都返回NULL