1

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

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

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(内容/列表)中获取控制器操作,然后从过滤器内部调用该控制器操作。

这可以做到吗?

4

4 回答 4

4

感谢所有参加的人。

我刚刚在另一个线程中找到了我的问题的解决方案。这里

这就是我所做的。

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

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

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

于 2013-11-29T09:28:25.600 回答
1

You can use Request::segment(index) to get part/segment of the 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
于 2013-11-29T09:20:48.440 回答
0

您可以使用RESTful 控制器

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');

});
于 2013-11-29T08:42:55.547 回答
0

在您的控制器功能中使用它 -

if (Request::is('admin/*'))
{
    //layout for admin (layout 2)
}else{
    //normal layout (layout 1)
}
于 2013-11-29T08:46:47.483 回答