почему я получил эту ошибку неправильного запроса (# 400) после отправки моего обновления в моем разделе «новости»:
Missing required parameters: id
Это моя функция обновления
php
public function actionUpdate($id)
{
$model = $this->findModel($id);
$oldFile = $model->getImageFile();
$currentImage=$model->image;
if ($model->load(Yii::$app->request->post())) {
// process uploaded image file instance
$image = $model->uploadImage();
// revert back if no valid file instance uploaded
if ($image === false) {
$model->image = $currentImage;
}
if ($model->save()) {
// upload only if valid uploaded file instance found
if ($image !== false && unlink($oldFile)) { // delete old and overwrite
$path = $model->getImageFile();
$image->saveAs($path);
}
return $this->redirect(['view', ['id'=>$model->id,'image'=>$model->image],
]);
}
} else {
return $this->render('update', [
'model'=>$model,
]);
}
}
public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
Обратите внимание, что процесс обновления и загрузки изображения на самом деле прошел успешно (поэтому я не показывал код метода моей модели, который вызвал мой actionUpdate). Если я перехожу непосредственно к просмотру недавно обновленной страницы и просмотру контента, он четко отображает обновленное содержимое вместе с изображением без проблем. Ошибка возникает только сразу после отправки обновления. Я думал, что передал параметр после обновления этой строкой:
return $this->redirect(['view', ['id'=>$model->id,'image'=>$model->image],
Прямо перед этой строкой я даже вывел $model->id для проверки, и он вывел идентификатор.
Я искал аналогичную проблему в StackOverflow и нашел, что кто-то предложил это: php
if ($model->save())
{
$lastInsertID = $model->getPrimaryKey();
return $this->redirect(['view', 'id' => $lastInsertID]);
}
Но это не сработало. Есть идеи?
return $this->redirect(['view', 'id'=>$model->id,'image'=>$model->image]); вместо return $this->redirect(['view', ['id'=>$model->id,'image'=>$model->image]]);Спасибо @Insane Skull, это работает!






Вы должны передать URL как плоский массив:
return $this->redirect(['view', 'id' => $model->id,'image' => $model->image]);
в вашем заявлении else вы не возвращаете модель вместо идентификатора