Laravel异常处理中如何获取请求对应的控制器及方法?
在Laravel异常处理器中获取控制器及方法的实现方案
你可以通过请求实例的路由信息直接获取对应的控制器和方法,完全不需要在控制器中编写try-catch语句,具体实现如下:
代码修改示例
$this->renderable(function (NotFoundHttpException $e, $request) { if ($request->is('api/*')) { // 获取当前路由实例 $route = $request->route(); if ($route) { // 获取路由对应的控制器与方法,格式为「完整控制器类名@方法名」 $action = $route->getActionName(); // 拆分出控制器和方法 [$controller, $method] = explode('@', $action); // 此处可根据需求使用$controller和$method做逻辑处理 // 例如记录日志:logger()->error("异常触发于 {$controller}::{$method}"); } return responder()->error($e->getMessage())->respond(404); } });
补充说明
- 如果路由使用闭包而非控制器方法,
getActionName()会返回Closure,建议提前判断避免报错 $controller变量包含完整的命名空间类名,可直接用于反射等高级操作- 该方案兼容Laravel 5.5及以上版本,不同版本路由API差异极小,无需额外适配
内容的提问来源于stack exchange,提问作者Utku Dalmaz
相关产品推荐
相关产品推荐

