【问题标题】:Laravel ModelNotFound exception handling with namesapces使用命名空间处理 Laravel ModelNotFoundexception
【发布时间】:2014-09-19 08:33:51
【问题描述】:

我有这个问题,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 捕获了所有异常,例如未找到控制器等,基本上每个异常。

我做错了什么?我从 Laracasts Exeptions 处理情节中得到了这个想法,但不知何故我错过了一些东西。因为我没有收到来自 Laravel 的关于我被卡住的问题的反馈。我怀疑命名空间与它有关,但我不确定..

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

【问题讨论】:

    标签: php exception laravel namespaces


    【解决方案1】:

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

    【讨论】:

    • 如果我切换它们似乎它的工作方式相同。但我在控制台中发现了一些数据——我的问题中的“编辑”段落。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2011-05-14
      • 2018-08-29
      • 1970-01-01
      • 2011-08-16
      • 2010-12-05
      相关资源
      最近更新 更多