6

这是自定义包中定义的简单路由

my_admin_route:
    pattern:  /admin/{name}
    defaults: { _controller: NamespaceCustomBundle:CustomControl:login }

上面的路由代码将调用CustomControlController's 方法loginAction()我的问题是我如何在路由中自动化函数名称,就像对于每个函数我不必再次定义路由应该有一个路由并按照定义{name}的参数自动调用函数路线如下

my_admin_route:
    pattern:  /admin/{name}
    defaults: { _controller: NamespaceCustomBundle:CustomControl:{name} }
4

3 回答 3

5

您可以查看 KNP Rad Bundle: http ://rad.knplabs.com/

它做了很多好事,包括您正在谈论的那件事

于 2013-09-23T10:12:35.270 回答
2

您可能想要创建自定义路由加载器,请参阅.

据我所知,目前没有开箱即用的解决方案可以controller/method/param1/param2像其他框架(CodeIgniter、FuelPHP...)那样直接将控制器 -> 方法 -> 参数映射到特定路由。

于 2013-09-22T16:28:53.060 回答
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.

注释路由,因为它允许您在不命名路由的情况下定义路由。名称将按约定隐式创建:注解路由

不完全符合您的要求,但如果您不想制作自定义路由加载器,它也非常优雅:

/**
 * @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');
    }
}
于 2013-09-23T07:07:11.893 回答