如何在symfony路由中自动化函数名称?

时间:2013-09-22 13:05:32

标签: php symfony symfony-2.3 symfony-routing

以下是自定义捆绑包中定义的简单路由

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} }

3 个答案:

答案 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

1。

在AdminController中创建操作:

public function adminAction($actionName)
{
    return $this->forward('MyBundle:TargetController:' . $actionName);
}

2

注释路由,因为它允许您定义路由而不命名它们。名称将按惯例隐式创建: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');
    }
}