Мне нужно иметь блоки try-catch внутри моей бизнес-логики. Таким образом, я могу сделать некоторые записи об ошибке с некоторым контекстом.
try {
// business logic
} catch(Exception $e) {
// Log message like 'Could not create user with email [email protected]'
$msgForUser = CustomErrorHandler::handleError($e, $data->email);
// Display message like 'Your user was not created bla bla bla'
return $msgForUser;
}
Я понимаю, что могу настроить пользовательскую обработку ошибок в App::error
в start/global.php
однако это исключает возможность включения переменных и сообщений, специфичных для этой функции.
Проблема в том, что теперь мои блоки try отлавливают ошибки в разработке. И я хотел бы все еще получить отладчик исключений Whoops в режиме разработки. Это возможно?
Вы немного боретесь с этим потоком, Laravel, похоже, склонен к использованию исключений для сообщения о реальных ошибках (по сравнению с использованием исключений для потока управления приложениями, как вы).
В Laravel нет ничего (что я знаю), что позволило бы вам сделать это. Я бы положил эту логику в ваш CustomErrorHandler::handleError
метод
class CustomerErrorHandler
{
//assuming `CustomerErrorHandler::handleError` is a static method
//call. If its a facade define an instance method in your service
//class.
static public function handleError($e)
{
if(...is environment where I want to see whoops...)
{
throw $e;
}
//if we're still here it's production
//so do our logging and create a
//$msgForUser string
//...
return $msgForUser;
}
}
Других решений пока нет …