基本上,每次控制器方法運行時我都會呼叫一個事件:
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粉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...)