Где выбрасывать исключение?

Обсуждаем, как правильно строить приложения
Ответить
user
Сообщения: 154
Зарегистрирован: 2017.12.05, 16:55

Где выбрасывать исключение?

Сообщение user »

В модели или контроллере?
Например, я делаю выборку данных из таблицы с помощью AR
Если данных нет выбрасываю исключение NotFounException()
Где проверку делать сразу в модели и вернуть результат в контроллере, а он сам уже разруливает?

Аватара пользователя
ElisDN
Сообщения: 5536
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Где выбрасывать исключение?

Сообщение ElisDN »

Из модели вернуть null или выбросить NotFoundException.
А в контроллере преобразовать в NotFoundHttpException.

user
Сообщения: 154
Зарегистрирован: 2017.12.05, 16:55

Re: Где выбрасывать исключение?

Сообщение user »

ElisDN писал(а):
2020.04.30, 21:59
Из модели вернуть null или выбросить NotFoundException.
А в контроллере преобразовать в NotFoundHttpException.
тогда такой вопрос, если я делаю return тернарным оператором, то тут как?

return $data = $model ? : тут исключение
throw new NotFoundHttpException не стработает, а если new NotFoundHttpException будет не нужный мне ответ и код 200 будет

Аватара пользователя
samdark
Администратор
Сообщения: 9326
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Где выбрасывать исключение?

Сообщение samdark »

Не делайте тернарный оператор.

Аватара пользователя
ElisDN
Сообщения: 5536
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Где выбрасывать исключение?

Сообщение ElisDN »

Пока тернарником никак:

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

if (!$model = Model::findOne($id)) {
    throw new NotFoundException('User not found.');
}
return $user;
Но в PHP 8 будет можно.

user
Сообщения: 154
Зарегистрирован: 2017.12.05, 16:55

Re: Где выбрасывать исключение?

Сообщение user »

samdark писал(а):
2020.04.30, 22:18
Не делайте тернарный оператор.
почему?

Аватара пользователя
samdark
Администратор
Сообщения: 9326
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Где выбрасывать исключение?

Сообщение samdark »

Потому что до PHP 8 выражения в нём не работают.

user
Сообщения: 154
Зарегистрирован: 2017.12.05, 16:55

Re: Где выбрасывать исключение?

Сообщение user »

Спасибо вам за пояснение!

user
Сообщения: 154
Зарегистрирован: 2017.12.05, 16:55

Re: Где выбрасывать исключение?

Сообщение user »

samdark писал(а):
2020.05.01, 12:35
Потому что до PHP 8 выражения в нём не работают.
получается, что yii2 не будет работать на 8-й версии

Аватара пользователя
samdark
Администратор
Сообщения: 9326
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Где выбрасывать исключение?

Сообщение samdark »

Посмотрим. Надо в тесты добавить да прогнать...

user
Сообщения: 154
Зарегистрирован: 2017.12.05, 16:55

Re: Где выбрасывать исключение?

Сообщение user »

samdark писал(а):
2020.05.15, 18:46
Посмотрим. Надо в тесты добавить да прогнать...
там даже в конфигурационных файлах используется тернарный оператор

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

        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
может ишака создать?

Аватара пользователя
ElisDN
Сообщения: 5536
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Где выбрасывать исключение?

Сообщение ElisDN »

user писал(а):
2020.05.15, 21:02
там даже в конфигурационных файлах используется тернарный оператор
Не используйте пока тернарный оператор именно для throw exception. Остальные используйте.

Ответить