首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 5控制器异常处理程序

Laravel 5控制器异常处理程序
EN

Stack Overflow用户
提问于 2015-03-05 19:32:16
回答 1查看 5.4K关注 0票数 3

我有一个应用程序,其中我的控制器被分解成特定的组(API、CMS和前端),这已经使用路由器组设置了。我的问题是如何为每个组创建自定义错误处理。

例如,当在任何API控制器操作中发生异常时,我希望返回带有错误代码和消息的json,CMS中的异常将输出详细的错误页,前端的异常将将用户发送到通用的404或500错误页(酌情)。

我知道如何在每个控制器操作中手动完成此操作,但这可能会变得非常重复。理想情况下,我希望为每个处理程序创建一个处理程序,并自动全面地使用它。

我还知道App\ exception \Handler类,但是如果任何控制器组都可以返回一个ModelNotFoundException,那么如何区分异常来自何处?

是否还有其他地方可以插入这种类型的异常处理程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-05 21:35:02

如果您转到app\Exceptions\Handler.php文件(您已经提到了),您可以随心所欲地做它。

例如,您可以这样定义您的render函数:

代码语言:javascript
运行
复制
public function render($request, Exception $e)
{
    $trace = $e->getTraceAsString();
    if ($e instanceof ModelNotFoundException
        && mb_strpos($trace, 'app\Http\Controllers\WelcomeController')
    ) {
        return response()->json('Exception ' . $e->getMessage());
    } elseif ($e instanceof ModelNotFoundException) {
        return "General model not found";
    }

    return parent::render($request, $e);
}

并添加到导入use Illuminate\Database\Eloquent\ModelNotFoundException;中。

现在,如果您在ModelNotFoundException中抛出WelcomeController,或者例如从WelcomeController中运行另一个类的方法,这个方法将抛出ModelNotFoundException,您可以跟踪它并返回json响应。在其他情况下,如果异常将是ModelNotFoundException的实例,则可以以其他方式呈现异常,而在所有其他情况下,可以使用标准异常方法来呈现异常。

通过这种方式,您不需要在控制器中定义任何东西,只需在Handler中就可以这样做。更复杂的是,您可以创建单独的方法或创建新的类,以您想要的方式处理特定的异常,并在此处理程序中运行它们。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28886152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档