如何在中间件Laravel中获得请求的控制器和动作的名称


How to get name of requested controller and action in middleware Laravel

我是Laravel的新手,我想在beforefilter中间件中获得请求的控制器和动作的名称。

谢谢,DJ

Laravel 5.6:

class_basename(Route::current()->controller);

Laravel 5.5及以下:

您可以使用Route::currentRouteAction()检索当前操作名称。不幸的是,这个方法将返回一个完全有名称空间的类名。所以你会得到这样的内容:

App'Http'Controllers'FooBarController@method

然后将方法名和控制器名分开:

$currentAction = 'Route::currentRouteAction();
list($controller, $method) = explode('@', $currentAction);
// $controller now is "App'Http'Controllers'FooBarController"
$controller = preg_replace('/.*'''/', '', $controller);
// $controller now is "FooBarController"

你可以添加这个(Laravel v7及以上)

use Illuminate'Support'Facades'Route;
....
Route::getCurrentRoute()->getActionMethod() 

Laravel 9

https://laravel.com/docs/9.x/routing accessing-the-current-route

访问当前路由你可以使用Current, currentRouteName,和currentRouteAction方法在Route facade上访问处理传入请求的路由信息:

use Illuminate'Support'Facades'Route;
 
$route = Route::current(); // Illuminate'Routing'Route
$name = Route::currentRouteName(); // string
$action = Route::currentRouteAction(); // string