使用命名空间处理Laravel ModelNotFoundexception

时间:2014-07-28 07:31:53

标签: php exception laravel namespaces

我有这个问题,其中laravel ModelNotFound exeption处理程序捕获所有异常,而不仅仅是与雄辩有关。

我已将此代码添加到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
});

Controller有这个部分代码:

namespace CompanyName\Admin;

class PromosController extends CompanyNameAdminController {

    public function show($id) {
        $promo = Promo::findOrFail($id);
    }
}

现在,如果我尝试传递不存在的id,我将收到白页,应用程序错误中的代码不会执行。其他问题是这个App:错误捕获所有的Exeptions,比如没有找到的控制器等,基本上每个例子。

我做错了什么?我从Laracasts Exeptions处理剧集得到了这个想法,但不知怎的,我错过了一些东西。因为Laravel没有得到关于问题的反馈,所以我被困住了。我怀疑命名空间与它有关但我不确定..

编辑: 最后我在控制台中找到了一些反馈: 500内部服务器错误 HTML: 重新加载页面以获取:http://cms.dev/admin/promos/533

的来源

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

问题在于您的异常处理程序的顺序。您首先拥有Exception的处理程序,ModelNotFoundException扩展Exception它由Exception处理程序处理,然后才能到达ModelNotFoundException。只需切换它们,您就会发现它按预期工作。