Laracode
Laracode

Хелпер функция rescue()

Иногда мы вынуждены использовать блок try-catch, чтобы просто проигнорировать ожидаемое исключение, которое внешний сервис выбрасывает при сбое. Laravel предлагает более элегантное решение для таких сценариев с помощью функции rescue() 🚀.

<?php

// Если возникнет исключение, значение переменной $language будет равно 'en'.
try {
    $language = LanguageDetector::detect($request->ip());
} catch (Exception $e) {
    $language = 'en';
}

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

$language = rescue(fn () => LanguageDetector::detect($request->ip()), 'en');

Функция rescue() выполняет замыкание (closure) и перехватывает все исключения, возникающие во время его выполнения. Все пойманные исключения будут отправлены в ваш обработчик исключений, однако обработка запроса будет продолжена:

<?php

return rescue(fn () => $this->method());

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

<?php

return rescue(fn () => $this->method(), false);

return rescue(
    fn () => $this->method(),
    fn () => $this->failure()
);

Аргумент report может быть передан функции rescue(), чтобы определить, следует ли сообщать об исключении через функцию report:

return rescue(
    fn () => $this->method(),
    report: fn (Throwable $throwable) => $throwable instanceof InvalidArgumentException
);