gpt4 book ai didi

php - Laravel 5 Controller 异常处理程序

转载 作者:行者123 更新时间:2023-12-01 12:36:43 27 4
gpt4 key购买 nike

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

例如,当任何一个API controller action发生异常时,我想将错误代码和错误消息发回json,CMS中的异常会输出详细的错误页面,而前端的异常会发送用户转到通用的 404 或 500 错误页面(视情况而定)。

我知道如何在每个 Controller 操作中手动执行此操作,但这可能会变得非常重复。理想情况下,我想为每个处理程序创建一个处理程序并自动在整个程序中使用它。

我也知道 App\Exceptions\Handler 类,但如果任何 Controller 组可以返回 ModelNotFoundException,例如,我如何区分异常来自何处?

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

最佳答案

如果您转到 app\Exceptions\Handler.php 文件(您提到的),您可以按照自己的意愿进行操作。

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

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;

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

这样你就不需要在你的 Controller 中定义任何东西,你可以在 Handler 中完成它并且它更复杂你可以创建单独的方法或创建新类来处理特定的异常您想要的方式并在此处理程序中运行它们。

关于php - Laravel 5 Controller 异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28886152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com