Я делаю приложение в Silex.Catch custom Exception в Silex не работает должным образом
Где-то в моем коде я throw new OrderNotFoundException($message, 404);
Так $app->error
в моем index.php
поймает это. Я реализовал это, как следует:
$app->error(function (\Exception $e, $code) use ($app) {
$messages = [ ];
switch ($code) {
case 401:
$messages[ 'message' ] = 'unauthorized';
break;
case 404:
if($e instanceof OrderNotFoundException){
$messages[ 'message' ] = 'no_order_found';
} else {
$messages[ 'message' ] = 'page_not_found';
}
break;
case 409:
if($e instanceof MultipleOrderException){
$messages[ 'message' ] = 'multiple_orders';
}
break;
default:
$messages[ 'message' ] = 'unknown_error';
}
return $app[ 'twig' ]->render('home.twig', $messages);
});
Но я продолжаю получать 'unknown_error'
.
Является ли $code
, который я выбрал с моим исключением, правильно или должен ли я сделать это другим способом?
Создание новой функции ошибок для всех Исключений, кажется, не так хорошо, как я думаю.
А как насчет моего 'MultipleOrderException'? Я теперь бросаю его как 'throw new OrderNotFoundException ($ message, 409);' поэтому я думаю, что должен делать 'class MultipleOrderExceptionextends ConflictHttpException {}' чем? – MichaelDeBoey
'OrderNotFoundException' подразумевает, что исключение предназначено только для кода 404. (Не обнаружена). Если вы хотите использовать другой статус http, тогда назовите его 'OrderException' и расширьте общий класс [HttpException] (https://github.com/symfony/http-kernel/blob/master/Exception/HttpException.php) или добавьте новый особый класс исключения для тех http status – Federkun
ОК, это более понятно, теперь спасибо :-) Я возьму ваш и @ DarkBee ответ на вопрос :-) – MichaelDeBoey