Yii2: Как перенаправить на недопустимые маршруты? - PullRequest
0 голосов
/ 26 апреля 2019

Вместо того, чтобы показывать страницу с ошибкой, я бы хотел перенаправить пользователя на стартовую страницу в целом, если маршрут недействителен (нет запрошенного контроллера или действия). Чтобы это звучало, перенаправление должно происходить только при «нормальных» запросах страницы. Хотя AJAX-вызовы также могут быть недействительными, я не хочу отправлять перенаправление в браузер здесь.

Как я могу сделать это эффективно?

1 Ответ

3 голосов
/ 26 апреля 2019

Вы можете переопределить ErrorAction class и реализует необходимую логику.Например:

class MyErrorAction extends \yii\web\ErrorAction
{

    public $redirectRoute;  

    public function run()
    {
        if (!Yii::$app->getRequest()->getIsAjax()) {
            Yii::$app->getResponse()->redirect($this->redirectRoute)->send();
            return;
        }
        return parent::run();
    }
}

После этого вы должны добавить это действие в контроллер и настроить его

class SiteController
{
    public function actions()
    {
        return [
            'error' => [
                'class' => MyErrorAction::class
                'redirectRoute' => 'site/my-page'
            ],
        ];
    }
}

и настроить маршрут действия ошибки вобработчик ошибок

'errorHandler' => [
    'errorAction' => 'site/error',
]
...