我正在Silex中创建应用程序。在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
通过正确或我应该以另一种方式吗?
为每个异常做一个新的错误函数似乎不是我认为的好方法。
那么我的'MultipleOrderException'呢?我现在把它扔出来就像抛出新的OrderNotFoundException($ message,409);'所以我认为我应该做'类MultipleOrderExceptionextends ConflictHttpException {}'比? – MichaelDeBoey
'OrderNotFoundException'暗示该异常仅适用于404代码。 (未找到)。如果你想使用其他的http状态,那么将其称为'OrderException'并扩展泛型[HttpException](https://github.com/symfony/http-kernel/blob/master/Exception/HttpException.php)类,或者添加这些http状态的新特定异常类 – Federkun
好了,现在更清楚了,谢谢:-)我会带你和@ DarkBee的回答考虑:-) – MichaelDeBoey