【发布时间】:2012-03-23 14:56:54
【问题描述】:
Silex 是否可以根据抛出的异常使用错误处理程序?
我知道这可以通过一个异常处理程序和一个关于抛出异常的类名的 switch 语句来实现,但对我来说,“Silex 方式”似乎更干净,但不起作用。
这就是我希望它工作的方式
<?php
// Handle access denied errors
$app->error(function (\App\Rest\Exception\AccessDenied $e) {
$message = $e->getMessage() ?: 'Access denied!';
return new Response($message, 403);
});
// Handle Resource not found errors
$app->error(function (\App\Rest\Exception\ResourceNotFound $e) {
$message = $e->getMessage() ?: 'Resource not found!';
return new Response($message, 404);
});
// Handle other exception as 500 errors
$app->error(function (\Exception $e, $code) {
return new Response($e->getMessage(), $code);
});
问题是当我在控制器中抛出 ResourceNotFound 异常时,会执行与 AccessDenied 相关的错误处理程序
可捕获的致命错误:传递给 {closure}() 的参数 1 必须是 App\Rest\Exception\AccessDenied 的实例,给出 App\Rest\Exception\ResourceNotFound 的实例
这是否可以通过其他方式实现,或者我应该将所有与通用异常一起使用的处理程序中的所有内容都填满并打开引发的异常类型?
PS:我知道$app->abort() 方法,但更喜欢处理异常
【问题讨论】: