在Silex中捕获自定义异常无法按预期工作

时间:2016-05-26 11:47:06

标签: php error-handling silex

我正在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是否正确传递,还是我应该这样做?

为每个异常制作一个新的错误函数似乎不是我认为的好方法。

2 个答案:

答案 0 :(得分:1)

Imho你会更喜欢这样做:

$app->error( function (OrderNotFoundException $e, $code ) use ( $app ) {

});


$app->error( function (MultipleOrderException $e, $code ) use ( $app ) {

});

//...

$app->error( function (Exception $e, $code ) use ( $app ) {


});

答案 1 :(得分:1)

.name应该实施var init = function() { console.log(typeof init.name);// will give blank string }; 。在这种情况下,您可以扩展OrderNotFoundException

HttpExceptionInterface

并使用

抛出异常
NotFoundHttpException