Редирект вместо ошибки 404 при вызове несуществующего action в контроллере

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Редирект вместо ошибки 404 при вызове несуществующего action в контроллере

Сообщение long399 »

Всем доброго времени суток!

Имеется некоторый контроллер, например DepartmentController и у него имеются некоторые action-ы: main. photo, structure и др. Если мы вызываем существующие действия, то все работает как положено.

Код: Выделить всё

http://example.ru/department/1/main // good
http://example.ru/department/1/photo // good
http://example.ru/department/1/structure // good
Но если обратиться к несуществующему action, то происходит отрисовка отображения с описанием, что произошла 404 ошибка.

Код: Выделить всё

http://example.ru/department/1/notfoundaction // 404 not found
Хочется вместо этого выполнять редирект на action main:

Код: Выделить всё

return $this->redirect(Url::to(['/department/main', 'id' => Yii::$app->request->get('id')]));
Подскажите, пожалуйста, как это можно реализовать?
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Редирект вместо ошибки 404 при вызове несуществующего action в контроллере

Сообщение Dominus »

Можно так:

Код: Выделить всё

<?php

namespace app\controllers;

use Yii;
use yii\base\Action;
use yii\web\BadRequestHttpException;
use yii\web\Controller;

/**
 * Class SiteController
 * @package app\controllers
 */
class SiteController extends Controller
{
    /**
     * @inheritdoc
     */
    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
        ];
    }

    /**
     * @param Action $action
     * @return bool|void
     * @throws BadRequestHttpException
     */
    public function beforeAction($action)
    {
        if (($exception = Yii::$app->getErrorHandler()->exception) && $exception->statusCode === 404) {
            return $this->response->redirect(['/main/default/index'])->send();
        }
        return parent::beforeAction($action);
    }
}
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Редирект вместо ошибки 404 при вызове несуществующего action в контроллере

Сообщение long399 »

Попробовал, к сожалению не срабатывает. Все-равно перекидывает на вьюшку с ошибкой :(
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Редирект вместо ошибки 404 при вызове несуществующего action в контроллере

Сообщение Dominus »

beforeAction добавляется там, где у вас экшен error, по умолчанию в SiteController

https://github.com/Dominus77/yii2-basic ... eb.php#L63
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
long399
Сообщения: 96
Зарегистрирован: 2019.08.13, 08:03
Откуда: г. Новосибирск

Re: Редирект вместо ошибки 404 при вызове несуществующего action в контроллере

Сообщение long399 »

Dominus писал(а): 2020.07.28, 13:01 beforeAction добавляется там, где у вас экшен error, по умолчанию в SiteController

https://github.com/Dominus77/yii2-basic ... eb.php#L63
Да, это работает, благодарю за помощь
Ответить