【问题标题】:Get Laravel 5 controller name in view在视图中获取 Laravel 5 控制器名称
【发布时间】:2026-01-07 10:35:01
【问题描述】:

我们的旧网站 CSS 设置为 body 标记具有控制器名称的 id 和动作名称的类,使用 Zend 框架 1。现在我们切换到 Laravel 5。我找到了一种方法通过Route 类获取动作名称,但找不到控制器名称的方法。我在 Laravel 文档中没有看到这样的内容。有什么想法吗?

这就是你如何处理行动。你注入 Route 类,然后调用:

$route->getActionName().

我正在为控制器寻找类似的东西。我检查了整个路由类,什么也没找到。

【问题讨论】:

    标签: laravel-5


    【解决方案1】:

    如果您的布局是 Blade 模板,您可以创建一个视图编辑器,将这些变量注入到您的布局中。在 app/Providers/AppServiceProvider.php 中添加如下内容:

    public function boot()
    {
        app('view')->composer('layouts.master', function ($view) {
            $action = app('request')->route()->getAction();
    
            $controller = class_basename($action['controller']);
    
            list($controller, $action) = explode('@', $controller);
    
            $view->with(compact('controller', 'action'));
        });
    }
    

    然后,您的布局模板中有两个可用的变量:$controller$action

    【讨论】:

    • 我喜欢这样。这不是我所需要的,但我看到你在做什么,我可以适应它。谢谢!
    • @sehummel 太棒了!很高兴我能够引导您朝着正确的方向前进。
    • @MartinBean 我正在搜索这个输出,用于自动化 Entrust 角色和权限。当我使用code app('request')->route()->getAction(); code 在中间件中,我得到 FatalErrorException 作为在非对象上调用成员函数 getAction() 但是,当我将此代码写入服务提供程序时,它有效吗?你能帮我吗,如何让它在中间件中工作!?
    • @MartinBean :这是我期待的问题(任务)answer to this 非常感谢任何帮助。
    • 它在我的场景中不起作用。我正在使用 laravel 5.1
    【解决方案2】:

    我使用一个简单的解决方案。你可以在任何地方测试和使用它,也可以在你的视图中:

    {{ dd(request()->route()->getAction()) }}
    

    【讨论】:

    • 这就是我要找的!!
    • 但是,这是一个很长的字符串"App\Http\Controllers\LocalLeadsSearch@index",我只想要LocalLeadsSearch
    • @AnujTBE TBE 您可以使用explode() PHP 方法轻松分离字符串; )
    • @AnujTBE 您可以在路由中定义您的控制器名称。例如,Route::get('/getProducts','searchAmazon@index')->name("searchAmazon.index");然后你可以从 {{ dd(request()->route()->getAction()['as']) }}
    【解决方案3】:

    要获得类似 PostController 的东西,请尝试关注 ...

    preg_match('/([a-z]*)@/i', $request->route()->getActionName(), $matches);
    $controllerName = $matches[1];
    

    $matches[1] 包括第一组,而 $matches[0] 包括所有匹配的内容。不需要的 @ 也是如此。

    【讨论】:

      【解决方案4】:

      我将简单地使用如下

      $request->route()->getActionMethod()
      

      【讨论】:

        【解决方案5】:

        使用这个

        strtok(substr(strrchr($request->route()->getActionName(), '\\'), 1), '@')
        

        【讨论】:

          【解决方案6】:

          你可以添加这个(用 Laravel v7+ 测试过

          <?php
              use Illuminate\Support\Facades\Route;
          
              echo Route::getCurrentRoute()->getActionMethod();
          ?>
          

          你可以使用辅助函数

          <?php echo request()->route()->getActionMethod(); ?>
          

          例如:-

          Route::get('test', [\App\Http\Controllers\ExampleController::class, 'exampleTest'])->name('testExample');

          现在如果我请求{app_url}/test,那么它将返回exampleTest

          【讨论】:

            【解决方案7】:

            要添加到 Martin Bean 的答案,在您的路线中使用 Route::view 将导致列表函数在此代码运行时抛出 未定义的偏移错误

            list($controller, $action) = explode('@', $controller);

            改为使用 this,如果不存在则将 null 分配给 $action

            list($controller, $action) = array_pad(explode('@', $controller), 2, null);

            【讨论】:

              最近更新 更多