Страница 1 из 1

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

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

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

Добавлено: 2020.04.30, 21:59
ElisDN
Из модели вернуть null или выбросить NotFoundException.
А в контроллере преобразовать в NotFoundHttpException.

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

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

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

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

Добавлено: 2020.04.30, 22:18
samdark
Не делайте тернарный оператор.

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

Добавлено: 2020.04.30, 22:22
ElisDN
Пока тернарником никак:

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

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

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

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

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

Добавлено: 2020.05.01, 12:35
samdark
Потому что до PHP 8 выражения в нём не работают.

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

Добавлено: 2020.05.01, 17:55
user
Спасибо вам за пояснение!

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

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

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

Добавлено: 2020.05.15, 18:46
samdark
Посмотрим. Надо в тесты добавить да прогнать...

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

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

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

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

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

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