Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5

Исключения в Laravel

Difficulty:IntermediateLength:ShortLanguages:

Russian (Pусский) translation by Sergey Zhuk (you can also view the original English article)

Будучи разработчиком PHP, вы скорее всего уже использовали исключения, потому что они позволяют вам заметить, когда что-то идет не так, или пользователь ведет себя некорректным образом (например делит на ноль). Без исключений ваше приложению завершилось бы показом нежелательных ошибок, которые было бы гораздо тяжелее отлаживать.  Так же важно, что можно сразу прекратить выполнение и перевести управление программы в другое направление.

Исключения довольно просты и делают процесс разработки гораздо легче. После того как вы выучите как работать с исключениями, они становятся повседневной частью вашей разработки.

Что такое исключение?

Я думаю, что лучшее определение исключениям дал Мартин Фаулер:

Исключения сигнализируют о том, что код ведет себя за пределами ожидаемого поведения.

Действительно в самом деле, исключение является событием, которое происходит во время выполнения программы, когда нарушается нормальный поток инструкций. Когда вы выбрасываете (throw, создаете объект исключения и передаете его в среду выполнения), система поймает (catch) его с помощью соответствующего обработчика и вернет соответствующее сообщение.

Когда нам следует использовать исключения?

Используйте исключения, когда ваша система сталкивается с исключительными ситуациями, которые могут привести к неправильной ее работе. Мы используем исключения только тогда, когда система не может определить, что произошло. Мартин Фаулер считает, что "если аварийное завершение программы - это ожидаемое поведение, то не стоит в таком случае использовать исключения". Это означает, что исключения следует использовать только тогда, когда вы не можете сами определить ошибку. Исключения должны быть использованы только в исключительных ситуациях.

Обратите внимание: исключения не очень подходят для взаимодействия с логическими операциями.

Например, для работы с валидацией входных данных, не нужно использовать исключения. Во-первых, входные данные детерминированы, и в приложении нам следует просто вернуть коллекцию с ошибками, вместо одной ошибки. Я считаю, что следует избегать использовать исключения во всех обстоятельствах, где у нас могут быть ошибки, связанные с валидацией.

Важно также и поймать исключение, так как в противном случае приложение завершится с ошибкой. Операция, которая ловит исключение, должна находится максимально близко к месту, где исключение было выброшено.

Что же представляют собой исключения в Laravel?

Laravel использует обработчик исключений, который находится в классе App\Exceptions\Handler.php. Этот класс содержит два основных метода (renderHttpException, который используется для всех HTTP исключений, как например 404 или 503, находится в родительском классе). Первый - это report, который логирует исключения или отправляет их во внешний сервис. Вот пример метода report:

Второй - render. Метод render отвечает за преобразование переданного ему исключения в HTTP ответ, который будет отправлен назад браузеру. Вот пример метода render:

Обратите внимание: можно воспользоваться свойством $dontReport у обработчика, чтобы игнорировать некоторые типы исключений.

Вы можете переопределить исключения Laravel со своими собственными исключениями:

Это будет выведено, когда в конфиге установлен debug режим.

Как создать собственные исключения в Laravel?

Возможно вам потребовалось создать собственный класс с исключением. Нужно отнаследоваться от базового класса Exception в Larevel. Я создал абстрактный класс, который будет вести себя как базовый, для нашего пользовательского исключения.  Создадим файл в App/Exceptions/monException.php:

И ваш класс исключения:

Этот класс можно теперь использовать в коде:

Помимо основного класса исключений Laravel, можно использовать библиотеку Assertion. Она может использоваться в качестве стороннего класса исключений; можно воспользоваться ей, чтобы избежать множества if блоков в вашем коде.

Чтобы установить Assertion, следует выполнить следующую команду:

Например если вам нужно проверить email пользователя, то можно выполнить следующее:

Заключение

Независимо от языка, который вы выбрали использовать, исключения являются очень важным аспектом для понимания, так как они помогают нам контролировать поток выполнения приложения.

Кроме того они помогают нам логировать различные проблемы и помогают сделать наше приложение более надежным.

Как вы могли заметить из данной статьи, Laravel предлагает серьезный механизм управления исключениями в веб приложениях.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.