【问题标题】:How to get controller action by passing URL in laravel如何通过在 laravel 中传递 URL 来获取控制器操作
【发布时间】:2017-01-31 17:44:02
【问题描述】:

我搜索了更多时间来查找如何通过传递 URL 来获取控制器方法名称,但没有找到我预期的答案。我想创建一个方法,我将在其中传递一个 URL,它会给出相应的控制器操作,如下所示,但我不知道。

我找到了一个助手,它只返回当前 URL 的操作 Route::currentRouteAction()

如果我的应用程序中的路由像 Route::get('/abc', 'YourController@method') 这样将生成 url http://example.com/abc 那么我怎样才能通过http://example.com/abc 得到YourController@method

   function getAction($url){
        //what will be logic?
       // return like App\Controllers\MyController@method
    }

我必须创建一个自定义权限系统,通过检查每个菜单的 URL 来显示和隐藏菜单。

【问题讨论】:

  • 我已经更新了我的问题,请查看@AlexeyMezenin

标签: laravel


【解决方案1】:

在您的控制器中,您可以执行以下操作:

<?php
    use Illuminate\Routing\Router;
    use Illuminate\Http\Request;

    public function index(Request $request, Router $route)
    {
        $action = $router->getRoutes()->match($request)->getActionName();

        // action should be what you're looking for.
    }

【讨论】:

  • 在控制器中,它只适用于当前路由。我已经更新了我的问题,请查看@Rafael Berro
【解决方案2】:

如果你愿意,你可以试试这个:

 Route::get('/the/url', 'YourController@method');

每次调用路由中的 URL 时,都会调用你的方法。 您无需导航到该 url 即可调用您的方法,它可以通过表单操作或按钮操作调用并执行您的方法。

编辑:

url 是您的 url 作为参数(普通路由) 导入这个:

use Illuminate\Routing\Route;

这是你的功能:

   public function method(Route $route, $url)
    {

        $routes = \Route::getRoutes()->getRoutes();
        foreach($routes as $r){
            if($r->getUri() == $url){
                $youraction= $r->getActionName();
               dd($youraction);
            }
           else{
                 dd('does not exist');
           }
        }
   }

经过测试。

【讨论】:

  • 您的答案是定义申请路线。这些已经在我的应用程序中定义。如果像Route::get('/the/url', 'YourController@method') 这样的路由,那么我如何通过传递` /the/url ` 获得`YourController@method`
  • 感谢您的反馈,只想创建一个辅助函数,就像我在问题中描述的那样。参数值将是 URL 而不是实例。 @Onix
  • 最后一次编辑我已经测试过了,它工作正常@Akashkhan
  • 我已经通过创建函数'function getAction($url){ $routes = Route::getRoutes()->getRoutes(); 检查了你的代码foreach($routes as $r){ $routeURL=url().'/'.$r->getUri(); if($routeURL == $url){ return $r->getActionName();休息; } } }' 但它不适用于路由参数值localhost/l5-test/modules/6/edit@Onix
  • 问太多了,你的问题不是参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 2014-05-12
  • 1970-01-01
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
相关资源
最近更新 更多