В моих контроллерах, которые создает Gii, часто можно увидеть следующее:
if($model->load(Yii::$app->request->post()) && $model->save()){
//.....do something such as redirect after save....//
}else
{
//.....render the form in initial state.....//
}
Это работает, чтобы проверить, отправлено ли POST из моей формы && указанная мной модель сохранила опубликованную информацию (насколько я понимаю).
Я сделал это аналогично в контроллерах, которые я создал сам, но в некоторых ситуациях это условное условие пропускается, потому что одно или оба из этих условий не выполняются, и форма просто отображается в исходном состоянии после того, как я отправил форму, и я могу видеть ПОЧТА, идущая по сети.
Может кто-нибудь объяснить, почему это условие не будет выполнено? Я полагаю, что проблема связана с ‘Yii :: $ app-> request-> post ()’, потому что я удалил часть ‘$ model-> save ()’ для тестирования, и она все еще обходит условное условие.
Пример кода, где он не работает в моем контроллере:
public function actionFreqopts()
{
$join = new FreqSubtypeJoin();
$options = new Frequency();
$model = new CreateCrystal();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
$model->insertFreqopts();
return $this->redirect(['fieldmap', 'id' => $join->id]);
} else {
return $this->render('freqopts', ['join' => $join, 'options' => $options]);
}
}
Первоначально я думал, что я не указываю правильную «модель» в том, что я пытаюсь сохранить опубликованные данные в FreqSubtypeJoin()
в этом случае и $model
является CreateCrystal();
однако, даже когда я изменяю модель в этом условном выражении, она все равно дает сбой. Было бы полезно, если бы кто-то мог кратко объяснить, что на самом деле делает метод load в терминах непрофессионала, если это возможно.
load()
метод Model
класс в основном заполняет модель данными от пользователя, например, post
запрос.
Для этого сначала загружается ваш массив данных в форме, которая соответствует тому, как Yii хранит вашу запись. Предполагается, что данные, которые вы пытаетесь загрузить, имеют вид
_POST['Model name']['attribute name']
Это первое, что нужно проверить, и, пока ваш _POST
данные на самом деле попадают в контроллер, часто там, где load()
терпит неудачу, особенно если вы установили свои собственные имена полей в форме. Вот почему, если вы измените модель, модель не будет загружаться.
Затем проверьте, какие атрибуты могут быть массово назначен. Это просто означает, могут ли атрибуты быть назначены в массовом порядке, как в $model->load()
или их нужно устанавливать по одному, как в
$model->title = "Some title";
Чтобы решить, можно ли массово назначить атрибут, Yii смотрит на ваш правила проверки и ваш сценарии. Он еще не проверяет их, но если для этого атрибута есть правило проверки, то в этом сценарии предполагается, что оно может быть назначено массово.
Итак, следующие вещи, которые нужно проверить, — это сценарии. Если вы не установили или не использовали их, то здесь не должно быть никаких проблем. Yii будет использовать сценарий по умолчанию, который содержит все атрибуты, для которых у вас есть правила проверки. Если вы использовали сценарии, то Yii позволит вам загружать только атрибуты, которые вы объявили в своем сценарии.
Следующее, что нужно проверить, это ваши правила проверки. Yii позволит вам только массово назначать атрибуты, которые связаны правилами.
Последние два обычно не вызывают load()
чтобы потерпеть неудачу, вы просто получите неполную модель, поэтому, если ваша модель не загружается, я бы посоветовал посмотреть, как данные отправляются из формы, и проверить массив _POST
данные отправляются. Убедитесь, что он имеет форму, которую я предложил выше.
Надеюсь, это поможет!
Других решений пока нет …