在 Laravel 中获取路由的控制器和操作

Pla*_*lev 0 laravel laravel-5

我想解析为路由配置的控制器名称和操作

我有一条路线:

Route::get('/somePage','SomeController@someAction');
Run Code Online (Sandbox Code Playgroud)

我可以使用以下方法获取控制器名称和操作:

resolve('/somepage');
Run Code Online (Sandbox Code Playgroud)

收到与我相同的结果Route::current()->getActionName()

App\Http\Controllers\SomeController@someAction
Run Code Online (Sandbox Code Playgroud)

lev*_*evi 5

这应该有效:

function getAction($uri, $method) {
        $route = collect(Route::getRoutes())
            ->filter(function($route) use($uri, $method){
            return $route->getUri() === $uri && 
                    in_array($method, $route->getMethods());
        })->first();
        return $route ? $route->getAction() : null;
}
Run Code Online (Sandbox Code Playgroud)

用法:

$action = getAction('posts', 'GET');
Run Code Online (Sandbox Code Playgroud)

或者:

$request = \Illuminate\Http\Request::create('posts', 'GET');
$action = Route::getRoutes()->match($request)->getAction();
Run Code Online (Sandbox Code Playgroud)