Middle Роутинг и контроллеры Обязательно

Result и ошибки

Объект Bitrix\Main\Result используется для возврата предсказуемых бизнес-ошибок валидации и операций с данными с обязательной проверкой статуса через isSuccess(). Исключения (Exception) зарезервированы для критических системных сбоев инфраструктуры, а смешивание обоих подходов в рамках одного метода считается антипаттерном.

Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.

Что нужно понимать

  • 1
    \Bitrix\Main\Result
  • 2
    \Bitrix\Main\Error
  • 3
    \Bitrix\Main\ErrorCollection
  • 4
    Обработка ошибок

Материалы

Официальная документация

Проверь себя

Заказчик жалуется: заказ не сохранился, а ошибок никто не видел. Что произошло в коде?

Результат OrderTable::update() не проверили. Ошибка осталась внутри UpdateResult, и её никто не спросил. У ORM-результата есть __destruct(), который в этом случае бросает E_USER_WARNING с текстом ошибок, но на проде с выключенным выводом его увидит только лог.

Чем плох addError(new Error($e->getMessage())) без второго аргумента?

Код ошибки остаётся 0, и фронтенд вынужден различать ошибки по тексту, который завтра переведут или перефразируют. Код — машинный идентификатор, текст — для человека, customData — для имени поля или дополнительных данных.

Когда возвращать Result, а когда бросать исключение?

Result — для ожидаемых отказов, которых может быть несколько сразу: валидация, бизнес-правило, нет остатка. Исключение — для программных ошибок и падений инфраструктуры: неверный аргумент, база недоступна. Смешивать в одном методе нельзя: проверивший isSuccess() код всё равно упадёт.

Сервису нужно копить ошибки между несколькими вызовами методов. Что использовать вместо Result?

Интерфейс Errorable и трейт ErrorableImplementation: getErrors(), getErrorByCode(), hasErrors(). Так устроен Engine Controller, и так фильтры добавляют свои ошибки в общий список контроллера.

Не сходится?

Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.

Знаете материал лучше?

Предложите ссылку: после проверки она появится в этом разделе.

Войти, чтобы предложить
Поделиться в Telegram
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти