You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动获取Laravel路由名、控制器方法名及请求方法类型

实现方案

你不需要在每个控制器方法中手动传入参数,既可以直接在方法内调用系统提供的辅助方法自动获取对应值,也可以通过中间件实现全局自动触发事件,完全省略手动写event调用的重复代码。

各目标参数的获取方式

  • 路由名(ROUTE_NAME):通过Route::currentRouteName()直接获取当前路由的命名值
  • 控制器方法名(CONTROLLER_METHOD_NAME):通过Route::current()->getActionMethod()直接获取当前路由匹配的控制器方法名称,无需手动解析路由action配置
  • 请求方法类型(CONTROLLER_METHOD_TYPE):通过request()->method()获取当前请求的HTTP方法,返回值为大写的GET/POST/PUT/DELETE/PATCH等标准方法名
  • 控制器名称(CONTROLLER_NAME):你已经在使用的class_basename(Route::current()->controller)即可正常获取

方案1:控制器内直接调用(保留原有写法,替换参数即可)

如果暂时不想调整现有结构,直接把手动写死的参数替换成自动获取的逻辑即可,示例:

public function destroy(User $user)
{
   event(new AdminActivity(
       Route::currentRouteName(),
       class_basename(Route::current()->controller),
       Route::current()->getActionMethod(),
       request()->method()
   ));

   // 原有业务逻辑
}

方案2:全局中间件自动埋点(推荐,零重复代码)

通过中间件统一处理事件触发,后续新增控制器方法不需要额外写任何日志相关代码,一劳永逸。

  1. 首先生成中间件文件,执行artisan命令:
    php artisan make:middleware LogAdminActivity
  2. 编辑生成的app/Http/Middleware/LogAdminActivity.php文件,写入以下逻辑:
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Route;
use App\Events\AdminActivity;

class LogAdminActivity
{
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        // 过滤闭包路由,只处理控制器路由
        if (Route::current()->controller) {
            event(new AdminActivity(
                Route::currentRouteName(),
                class_basename(Route::current()->controller),
                Route::current()->getActionMethod(),
                $request->method()
            ));
        }

        return $response;
    }
}
  1. 打开app/Http/Kernel.php文件,将该中间件注册到你需要记录后台操作的中间件组中,比如后台admin路由组或者全局web中间件组,注册后所有匹配的请求都会自动触发AdminActivity事件,不需要在控制器内写任何重复代码。

注意:如果需要在控制器方法执行前触发事件,把event调用的逻辑移到$next($request)之前即可。

内容的提问来源于stack exchange,提问作者Pouya Vaghefi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:09:20