Laravel ModelNotFound异常处理命名空间


Laravel ModelNotFound exception handling with namesapces

我有这个问题,laravel ModelNotFound异常处理程序捕获所有异常,而不仅仅是与eloquent相关的。

我在global.php中添加了以下代码:

// this is default code
App::error(function(Exception $exception, $code)
{
    Log::error($exception);
});
// added code
App::error(function(ModelNotFoundException $exception)
{
    //do something, in my case redirect to 404 or whaterver
});

控制器有这个部分代码:

namespace CompanyName'Admin;
class PromosController extends CompanyNameAdminController {
    public function show($id) {
        $promo = Promo::findOrFail($id);
    }
}

现在,如果我尝试传递不存在的id,我会收到白页,在应用程序错误代码不执行。另一个问题是,这个App:error捕获所有异常,如未找到控制器等,基本上每个异常。

我做错了什么?我从laracast的异常处理章节中得到了这个想法,但不知何故,我遗漏了一些东西。因为我没有从Laravel得到关于问题的反馈。我怀疑名称空间与此有关,但我不确定…

编辑:最后我在主机上找到了一些反馈:500服务器内部错误HTML:重新加载页面以获取以下内容的源代码:http://cms.dev/admin/promos/533

ModelNotFoundException不在该名称空间中,因此无法找到它。指定限定名称:

App::error(function(Illuminate'Database'Eloquent'ModelNotFoundException $exception)
{
    //do something, in my case redirect to 404 or whaterver
});

问题在于异常处理程序的顺序。首先有Exception的处理程序,当ModelNotFoundException扩展Exception时,它在到达ModelNotFoundException之前由Exception处理程序处理。简单地切换它们,你应该会发现它工作如预期的