Как правильно выбросить исключение 404 если модель не найдена?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
vv-off
Сообщения: 56
Зарегистрирован: 2018.01.12, 11:49

Как правильно выбросить исключение 404 если модель не найдена?

Сообщение vv-off »

Всем привет!
Есть сайт, там настроена страница ошибок, если модель не найдена то выбрасывается исключение 404, сайт в дебаге показывает 404, инструменты разработчика тоже есть 404, но в https://bertal.ru/ упорно показывает 200. Как правильно выбросить исключение?
в actions.php

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

public function actions(): array
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],
        ];
    }
    
в config

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

'errorHandler' => [
            'errorAction' => 'site/error',
        ],
исключение отдаю так:

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

if (!$model) {
            throw new HttpException(404,\Yii::t('app', 'Запрошенная страница не найдена'));
        }
vv-off
Сообщения: 56
Зарегистрирован: 2018.01.12, 11:49

Re: Как правильно выбросить исключение 404 если модель не найдена?

Сообщение vv-off »

Если просто набираю несуществующую страницу, то всё ок, и страница 404 и bertal видит ответ 404, получается, что именно при выбрасывании исключения в контроллере для не найденной модели, я что-то делаю не так.
Аватара пользователя
SiZE
Сообщения: 2817
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Как правильно выбросить исключение 404 если модель не найдена?

Сообщение SiZE »

Выглядит, как все по дефолту. Проверьте выполняется ли условие if (!$model) { ?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Как правильно выбросить исключение 404 если модель не найдена?

Сообщение maleks »

Я это исключение использую для такой ситуации

yii\web\NotFoundHttpException
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Как правильно выбросить исключение 404 если модель не найдена?

Сообщение caHek2x »

NotFoundHttpException наследуется от HttpException просто не будет потребности передавать 404 оно само передаст его в конструкторе родителю ...
хотя может автор HttpException взял какойто кастомный ... а не yii\web
vv-off
Сообщения: 56
Зарегистрирован: 2018.01.12, 11:49

Re: Как правильно выбросить исключение 404 если модель не найдена?

Сообщение vv-off »

Нет, исключение вполне стандартное.
yii\web\NotFoundHttpException это тоже использовал, результат такой же.
if отрабатывает, на самом сайте переходит на дефолтную страницу для 404, именно всякие сервисы включая яндекс видят ответ 200,
seo уже весь мозг проел, что страница 404, а сервисы их сео-ые видят как 200.
Еще момент, url при не существующей модели остаётся как должен быть для отображения этой модели, а не site/error, может в этом проблема,
хотя опять же повторюсь, что если намеренно в урле для отображения модели допускаю ошибку, то сервисы видят 404.
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Как правильно выбросить исключение 404 если модель не найдена?

Сообщение caHek2x »

юрл и не должен меняться вы же не редирект делаете ...
Ответить