在 Silex 中捕获自定义异常未按预期工作
Catch custom Exception in Silex isn't working as expected
我正在 Silex 中申请。
我在代码中的某个地方做了 throw new OrderNotFoundException($message, 404);
所以我的 index.php
中的 $app->error
会捕捉到这个。
我已按如下方式实施:
$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
是否正确传递,或者我应该以其他方式执行此操作?
为每个异常创建一个新的错误函数似乎不是我认为的好方法。
恕我直言,你最好这样做:
$app->error( function (OrderNotFoundException $e, $code ) use ( $app ) {
});
$app->error( function (MultipleOrderException $e, $code ) use ( $app ) {
});
//...
$app->error( function (Exception $e, $code ) use ( $app ) {
});
OrderNotFoundException
应该实施 HttpExceptionInterface
。在这种情况下,您可以扩展 NotFoundHttpException
:
use Symfony\Component\HttpKernel\NotFoundHttpException;
class OrderNotFoundException extends NotFoundHttpException {}
然后用
抛出异常
throw new OrderNotFoundException($message);
我正在 Silex 中申请。
我在代码中的某个地方做了 throw new OrderNotFoundException($message, 404);
所以我的 index.php
中的 $app->error
会捕捉到这个。
我已按如下方式实施:
$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
是否正确传递,或者我应该以其他方式执行此操作?
为每个异常创建一个新的错误函数似乎不是我认为的好方法。
恕我直言,你最好这样做:
$app->error( function (OrderNotFoundException $e, $code ) use ( $app ) {
});
$app->error( function (MultipleOrderException $e, $code ) use ( $app ) {
});
//...
$app->error( function (Exception $e, $code ) use ( $app ) {
});
OrderNotFoundException
应该实施 HttpExceptionInterface
。在这种情况下,您可以扩展 NotFoundHttpException
:
use Symfony\Component\HttpKernel\NotFoundHttpException;
class OrderNotFoundException extends NotFoundHttpException {}
然后用
抛出异常throw new OrderNotFoundException($message);