【问题标题】:Get controller action from url, laravel从 url 获取控制器动作,laravel
【发布时间】:2013-12-15 09:27:30
【问题描述】:

我可以从给定的 URL 获取控制器操作吗?

在我的项目中,我将为管理员和普通用户使用不同的布局。即

something.com/content/list - 将显示布局 1。

something.com/admin/content/list - 将显示布局 2。

(但这些需要由同一个控制器生成)

为此,我添加了过滤器来检测模式'admin/*'。现在我需要调用 URL 其余部分所需的操作('content/list' 或将出现在那里的任何内容)。意思是,admin/ 之后可能有任何内容,它可能是 foo/1/edit(在这种情况下应该调用 foo 控制器)或者它可能是 bar/1/edit(在这种情况下应该调用 bar 控制器)。这就是为什么控制器名称应该从过滤器捕获的 url 动态生成,

所以,我想从 URL(内容/列表)获取控制器操作,然后从过滤器内部调用该控制器操作。

这个可以吗?

【问题讨论】:

  • 你是如何为这些创建路由的?你能发布与这些相关的路线吗?
  • 你能显示这些路线吗?

标签: php laravel filter laravel-4 laravel-routing


【解决方案1】:

感谢所有参与的人。

我刚刚在另一个帖子中找到了我的问题的解决方案。 HERE

这就是我所做的。

if(Request::is('admin/*')) {
    $my_route = str_replace(URL::to('admin'),"",Request::url());

    $request = Request::create($my_route);
    return Route::dispatch($request)->getContent();
}

我在文档中找不到这些方法。所以我希望,这对其他人也有帮助。

【讨论】:

    【解决方案2】:

    您可以使用Request::segment(index) 获取url 的部分/片段

    // http://www.somedomain.com/somecontroller/someaction/param1/param2
    $controller = Request::segment(1); // somecontroller
    $action = Request::segment(2); // someaction
    $param1 = Request::segment(3); // param1
    $param2 = Request::segment(3); // param2
    

    【讨论】:

      【解决方案3】:

      您可以使用RESTful Controller

      Route:controller('/', 'Namespace\yourController');
      

      但是该方法必须以HTTP动词为前缀,我不确定它是否可以包含更多的url段,在你的情况下,我建议只使用:

      Route::group(array('prefix' => 'admin'), function()
      {
          //map certain path to certain controller, and just throw 404 if no matching route  
          //it's good practice
          Route::('content/list', 'yourController@yourMethod');
      
      });
      

      【讨论】:

      • 这将是实现我想要的一种方式。但这不是重点。我想知道是否可以从动态 URL 中获取特定控制器操作的名称,然后无论我们在 URL 中获得什么都调用该控制器。
      【解决方案4】:

      在你的控制器函数中使用它 -

      if (Request::is('admin/*'))
      {
          //layout for admin (layout 2)
      }else{
          //normal layout (layout 1)
      }
      

      【讨论】:

      • 我已经这样做了。现在,我需要查看在“admin/”之后找到的内容,然后调用与该 url 对应的控制器。看看我发布的有问题的编辑。
      • 使用 $segment = Request::segment(1); 读取单个 uri 段,然后进行相应的重定向。就像更改参数值一样 1,2 .. 取决于您需要用来决定重定向的参数。
      • 重定向对我不起作用,因为这会将当前 URL 从 'admin/foo/1/edit' 更改为 'foo/1/edit'。我需要 URL 中的“管理员”部分来确定它是普通用户还是管理员用户。
      • 我想要的是能够获取 URL 其余部分的控制器操作名称,然后调用该控制器。
      • 这不是重定向,使用这种方法读取uri段,然后使用该段值来决定你需要加载哪个布局。
      猜你喜欢
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 2018-09-13
      • 2013-08-17
      • 1970-01-01
      相关资源
      最近更新 更多