`Отсутствует обязательный параметр: id` после успешного обновления

почему я получил эту ошибку неправильного запроса (# 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]);
}

Но это не сработало. Есть идеи?

в вашем заявлении else вы не возвращаете модель вместо идентификатора

Nazmul Abedin 24.07.2019 12:01
return $this->redirect(['view', 'id'=>$model->id,'image'=>$model->image]); вместо return $this->redirect(['view', ['id'=>$model->id,'image'=>$model->image]]);
Insane Skull 24.07.2019 12:22

Спасибо @Insane Skull, это работает!

codejunkie 24.07.2019 12:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
494
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны передать URL как плоский массив:

return $this->redirect(['view', 'id' => $model->id,'image' => $model->image]);

Другие вопросы по теме