Как при ошибке сделать redirect на другой action?

нужно сделать режирект при любой ошибке на site/coming-soon, сможет кто нить помочь?
  • Вопрос задан
  • 189 просмотров
Решения вопроса 1
supervaleha
@supervaleha
Web-development
В SiteController, при условии указания error handler на site/error

public function actions()
    {
        return [
            'error' => [
                // изменяем класс обработчика ошибки
                'class' => 'frontend\components\ErrorAction',
            ],
        ];
    }


Далее создаем сам action:

<?php
namespace frontend\components ;
   
use Yii;
use yii\helpers\Url ;

class ErrorAction extends \yii\web\ErrorAction {
    public function run()
    {
        if (($exception = Yii::$app->getErrorHandler()->exception) === null) {
            $exception = new HttpException(404, Yii::t('yii', 'Page not found.'));
        }
        if ($exception instanceof HttpException) {
            $code = $exception->statusCode;
        } else {
            $code = $exception->getCode();
        }
        if ($exception instanceof Exception) {
            $name = $exception->getName();
        } else {
            $name = $this->defaultName ?: Yii::t('yii', 'Error');
        }
        if ($code) {
            $name .= " (#$code)";
        }

        if ($exception instanceof UserException) {
            $message = $exception->getMessage();
        } else {
            $message = $this->defaultMessage ?: Yii::t('yii', 'An internal server error occurred.');
        }

        if (Yii::$app->getRequest()->getIsAjax()) {
            return "$name: $message";
        } else {
            // !!!!!!!!!!!!!!!!!!!!!!! в случае необходимости редиректить один из статусо ошибки - подойдет такой вариант. В случае редиректа ВСЕХ ошибок - нужно убрать все условия и оставить лишь реирект
            if( $exception->statusCode == 404 ){
                Yii::$app->getResponse()->redirect( Url::home(true), 301 )->send();
                return;
            }else{
                return $this->controller->render($this->view ?: $this->id, [
                    'name' => $name,
                    'message' => $message,
                    'exception' => $exception,
                ]);
            }
        }
    }}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
www.yiiframework.com/doc-2.0/guide-runtime-handlin...
'components' => [
        'errorHandler' => [
            'errorAction' => 'site/coming-soon',
        ],
    ]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы