Обработка нефатального исключения в Laravel

В моем приложении laravel, скажем, у меня есть немного кода, например, в качестве примера

function convert_amount($amount, $currency, $date)
{
if (strlen($currency) <> 3)
{
// Exception thrown
} else {
// convert $amount from $currency on $date
}
return $amount;
}

Здесь я просто конвертирую число из валюты в базу. Я выполняю простую проверку, чтобы убедиться, что переданная строка валюты состоит из 3 символов, чтобы убедиться, что это код валюты ISO (EUR, GBP, USD и т. Д.). Если нет, я хочу выдать исключение, но не привести к падению приложения на страницу с ошибкой, как это часто бывает в обработчике ошибок Laravel.

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

редактировать

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

class NonFatalException extends Exception {}

App::error(function(NonFatalException $e)
{
// Log the exception
Log::error($e);
// Push it into a debug warning in the session that can be displayed in the view
Session::push('debug_warnings', $e->getMessage());
});

Тогда где-то в моем приложении:

throw new NonFatalException('Currency is the wrong format. The amount was not converted');

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

0

Решение

Вы на правильном пути. Почему бы не использовать try...catch Тхо?

Ваш вспомогательный метод будет:

function convert_amount($amount, $currency, $date)
{
if (strlen($currency) <> 3)
{
throw new NonFatalException('Currency is the wrong format. The amount was not converted');
} else {
// convert $amount from $currency on $date
}
return $amount;
}

И всякий раз, когда вы будете использовать его, поместите его в try...catch:

try {
convert_amount($amount, $currency, $date);
} catch (NonFatalException $e) {
// Log the exception
Log::error($e);
// Push it into a debug warning in the session that can be displayed in the view
Session::push('debug_warnings', $e->getMessage());
}

Таким образом, ваше приложение никогда не остановится, и у вас появится сообщение об ошибке в сеансе.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector