首頁  >  問答  >  主體

如何自動取得 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 天前381

全部回覆(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...)

    回覆
    0
  • 取消回覆