Существует поле базы данных с именем 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