以下是自定义捆绑包中定义的简单路由
my_admin_route:
pattern: /admin/{name}
defaults: { _controller: NamespaceCustomBundle:CustomControl:login }
上面的路由代码将调用CustomControlController
的方法loginAction()
我的问题是如何在路由中自动化函数名称,就像每个函数一样,我不必再次定义路由是一条路线,并在路线中自定义参数{name}
,如下所示
my_admin_route:
pattern: /admin/{name}
defaults: { _controller: NamespaceCustomBundle:CustomControl:{name} }
答案 0 :(得分:5)
你可以看看KNP Rad Bundle: http://rad.knplabs.com/
它做了很多好事,包括你正在讨论的那个
答案 1 :(得分:2)
您可能想要创建自定义路由加载器see。
据我所知,目前还没有直接映射控制器的开箱即用解决方案 - >方法 - >与其他框架一样的特定路由controller/method/param1/param2
的参数(CodeIgniter,FuelPHP ...)。
答案 2 :(得分:2)
正如@Onema所说,确实这可以通过自定义路由加载器来实现。
我可以想到另外两个选项,其中没有一个选项完全您想要的但可能会感兴趣:
1. Creating a controller action which would just forward request to other actions
2. Using @Route annotation
在AdminController中创建操作:
public function adminAction($actionName)
{
return $this->forward('MyBundle:TargetController:' . $actionName);
}
注释路由,因为它允许您定义路由而不命名它们。名称将按惯例隐式创建:Annotation routing。
如果你不想制作自定义路由加载器,那么你的想法并不完全,但也非常优雅:
/**
* @Route("/admin/dosmt")
*/
public function dosmtAction()
{
return new Response('smtAction');
}
此外,您可以将所有控制器操作安装在前缀上,就像使用YAML路由一样:
/**
* @Route("/admin")
*/
class MyController extends Controller
{
/**
* @Route("/dosmt")
*/
public function dosmtAction()
{
return new Response('smtAction');
}
}