【发布时间】:2025-12-15 15:40:01
【问题描述】:
我在 RouteServiceProvider 中有代码:
$router->bind('user', function ($value) {
try{
throw (new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException);
}catch(Exception $e){
exit('nott');
}
});
我没有得到输出
nott
我来了
Sorry, the page you are looking for could not be found.
NotFoundHttpException in RouteServiceProvider.php line 75:
...
编辑: 这有效:
$router->bind('user', function ($value) {
try{
throw (new \Symfony\Component\HttpKernel\Exception\NotFoundHttpException);
}catch(\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e){
exit('addd');
}
});
但这不起作用:
$router->bind('user', function ($value) {
try{
return (new User)->findOrFail(122);
}catch(\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e){
exit('addd');
}
});
【问题讨论】:
-
离题,但一般来说,抓住一般
Exception类被认为是不好的做法;相反,您应该捕获您预期会遇到的特定类型的异常。 (顺便说一句:捕获一般Exception类的做法被戏称为“口袋妖怪异常处理”——因为你会全部捕获) -
您遇到的问题与 Laravel 无关,与命名空间有关。在 PHP 类中使用命名空间时,必须引用它使用的所有类的完整命名空间。即使是*命名空间中的普通 PHP 也需要一个反斜杠来引用它们的命名空间。或者你可以告诉班级
use他们,然后你就不需要命名空间了。 (这同样适用于您正在使用的 Symphony 异常类以及任何其他类;您可以在类的顶部为它们添加一个use语句,然后您不需要在您的代码体。更整洁。
标签: php laravel laravel-4 laravel-5