首页  >  问答  >  正文

如何自动获取 Laravel 控制器方法名称和方法类型

基本上,每次控制器方法运行时我都会调用一个事件:

public function destroy(User $user)
{
   event(new AdminActivity('admin.users.destroy',class_basename(Route::current()->controller),'destroy','DELETE'));

   ...
}

事实上它正在保存这些信息:

event(new AdminActivity(ROUTE_NAME,CONTROLLER_NAME,CONTROLLER_METHOD_NAME,CONTROLLER_METHOD_TYPE));

现在我想自动传递所需的参数,而不是手动传递参数。

所以我需要获取路由名称控制器方法名称控制器方法类型 auto(就像 class_basename(Route::current ()->controller) 返回控制器名称)。

那么我该怎么做呢?

P粉573809727P粉573809727210 天前382

全部回复(1)我来回复

  • P粉616383625

    P粉6163836252024-02-27 09:22:02

    您可以将Route::current()传递给事件,然后从\Illuminate\Routing\Route对象中获取您需要的信息

    public function destroy(User $user)
    {
       event(new AdminActivity(\Illuminate\Support\Facades\Route::current()));
    
       ...
    }
    
    

    然后,在您的 AdminActivity 事件类中

    class AdminActivity
    {
        public function __construct(\Illuminate\Routing\Route $route)
        {
            $controllerClass  = class_basename($route->getController());
            $controllerMethod = $route->getActionMethod();
            $routeName        = $route->getAction('as');
            $methods          = $route->methods();
        }
    }
    

    注意$route->methods()的返回类型是一个数组,包含所有有效的请求方法(GET、HEAD、POST...)< /p>

    回复
    0
  • 取消回复