我可以从给定的网址获取控制器操作吗?
在我的项目中,我将使用不同的布局用于管理员和普通用户。即。
something.com/content/list - 将显示布局1.
something.com/admin/content/list - 将显示布局2.
(但这些需要由同一个控制器生成)
为此,我添加了过滤器以检测模式'admin/*'
。现在,我需要调用其余网址(“content/list
”或其他任何内容)所需的操作。意思是,在admin/
之后可能有foo/1/edit
(在这种情况下应该调用foo控制器)或者它可能是bar/1/edit
(在这种情况下应该调用bar控制器)。这就是为什么控制器名称应该从过滤器捕获的URL动态生成的原因
所以,我想从URL(内容/列表)中获取控制器操作,然后从过滤器内部调用该控制器操作。
可以这样做吗?
答案 0 :(得分:2)
感谢所有参与的人。
我刚刚在另一个帖子中找到了我的问题的解决方案。 HERE
这就是我所做的。
if(Request::is('admin/*')) {
$my_route = str_replace(URL::to('admin'),"",Request::url());
$request = Request::create($my_route);
return Route::dispatch($request)->getContent();
}
我在文档中找不到这些方法。所以我希望,这也将有助于其他人。
答案 1 :(得分:0)
您可以使用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');
});
答案 2 :(得分:0)
在控制器功能中使用它 -
if (Request::is('admin/*'))
{
//layout for admin (layout 2)
}else{
//normal layout (layout 1)
}
答案 3 :(得分:0)
您可以使用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