【问题标题】:How to get name of requested controller and action in middleware Laravel如何在中间件 Laravel 中获取请求的控制器和操作的名称
【发布时间】:2015-08-07 04:40:12
【问题描述】:

我是 Laravel 的新手,我想在 beforefilter middelware 中获取请求的控制器和操作的名称。

谢谢, DJ

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

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

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

    【讨论】:

    • <?php echo request()->route()->getActionMethod(); ?> 你也可以像这个 Helper 函数一样使用
    【解决方案2】:

    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 是否为此提供了内置功能,因为为每个请求执行此操作将是一项昂贵的操作......
    • 据我所知,没有内置函数。
    • @limonte 没错,没有实现任何方法。事实上,Illuminate\Routing\Route 中的runController 方法使用explode 以完全相同的方式确定需要为匹配的路由执行的$class$method
    • class_basename(Route::current()->controller) 也可以解决问题。 L5.6 测试
    • 嘿,你能告诉我如何获得这个控制器的 all 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多