Yii2 - Bad Request (#400) - Отсутствуют обязательные параметры: id

КомментарийКонтроллер:

public function actionCreate()
{

    $model = new Comment();

    var_dump(Yii::$app->request->post());

     if ($model->load(Yii::$app->request->post())) 
     {
        $model->user_id = Yii::$app->user->getId();
        $model->created_at = time();
        $model->updated_at = time();
        $model->save();

        return $this->redirect(Url::to(['post/view', 'id'=>$model->post_id])); 
     }

    return $this->redirect(Url::to(['/post/index'])); 
}

Если я перехожу от false к $model->save(), данные сохраняются в базе данных без значения в поле внешнего ключа «post_id», но все равно не перенаправляют меня на правильную страницу.

Новичок в yii и относительно новичок в разработке программного обеспечения, любая помощь будет принята с благодарностью.


person Kyle    schedule 04.07.2017    source источник
comment
Я думаю, вы не установили $model->post_id   -  person ArtOsi    schedule 04.07.2017


Ответы (2)


Он перенаправляет вас на post/view - означает PostController - actionView($id), но без параметра $id, который требуется в actionView($id). Вот почему вы получаете 400 ошибок отсутствующих параметров. Вы должны добавить этот параметр - на данный момент, если вы добавите false в метод save() и он будет сохранен без post_id - вы не сможете перенаправить пользователя на post/view, потому что вы не передали id этого объекта в GET

Чтобы избежать таких вещей, вы должны проверить, действительно ли $model сохранено if($model->save()), и если перенаправить пользователя на просмотр.

person Yupik    schedule 04.07.2017
comment
Привет, мой ActionView PostController выглядит так: public function actionView($id) { $comment = new Comment(); return $this-›render('view', [ 'model' =› $this-›findModel($id), 'comment' =› $comment, // передача формы комментариев в /post/view.php ]); } Я не уверен, что делать дальше, я полный новичок. P.s.спасибо за быстрый ответ. - person Kyle; 04.07.2017

вам нужно сделать, как показано ниже, в вашем контроллере. Если идентификатор существует, он сохранит значение идентификатора, в противном случае он определяет и сохраняет его как пустое.

public function actionView($id='') {
  //
}
person lalithkumar    schedule 04.07.2017
comment
Вы пробовали так? @Кайл Дайсон - person lalithkumar; 04.07.2017
comment
Да спасибо! Однако теперь я получаю Not Found (# 404). И все равно в базу ничего не сохраняется - person Kyle; 04.07.2017
comment
вы указали путь как post/view, что означает, что в PostController у вас должна быть функция actionView. Она есть? - person lalithkumar; 04.07.2017
comment
А снаружи если цикл вы упомянули /post/index? - person lalithkumar; 04.07.2017
comment
Да, он есть, я сейчас добавлю его код в пост - person Kyle; 04.07.2017
comment
вы должны указать post/index вместо /post/index - person lalithkumar; 04.07.2017
comment
А также собирается view или index? - person lalithkumar; 04.07.2017