如果我键入domain/something/someaction/10
,我将使用以下路由规则捕获它:
Route::get('/{resource}/someaction/{id}', function($resource,$id){
//do something
});
现在,在这个闭包中,我想将这个请求转发给控制器的操作。但它可以是任何东西,例如:
$controller_name = transformThisResource($resource).'Controller';
$controller = new $controller_name;
$controller->someaction($id);
我遇到的特别问题是,这个项目中大约有30个控制器,每个控制器中由3个动作执行的3个任务的行为完全相同。使用如上所述的功能,我的路由文件中只需要3条规则。
我认为从另一个控制器的方法调用控制器的方法没有多大意义。
我认为transformThisResource()
方法实际上应该返回一个重定向路径。例如,假设您的用户访问domain/something/someaction/10
(驻留在控制器A中)时,您希望执行驻留在另一个控制器的方法中的一些代码(以下称为控制器B)制器a返回重定向:
public function controllerADefaultResponder($resource, $id)
{
return redirect(mapToUri($resource, $id));
}
上述代码可以重定向到诸如/the/right/controller/method?resource=domain/something&id=10
或domain/something/right/controller/10
之类的链路。这两个链接之间的唯一区别是如何选择将数据从一个请求传递到另一个请求。一个使用路由参数,另一个使用GET参数。