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

Posted

技术标签:

【中文标题】如何在 symfony 路由中自动化函数名?【英文标题】:How to automate function name in symfony routing? 【发布时间】:2013-09-27 10:58:01 【问题描述】:

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

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 

【问题讨论】:

【参考方案1】:

您可能想要创建一个自定义路由加载器see。

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

【讨论】:

【参考方案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');
    

【讨论】:

【参考方案3】:

您可以查看 KNP Rad 捆绑包: http://rad.knplabs.com/

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

【讨论】:

以上是关于如何在 symfony 路由中自动化函数名?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 symfony 2 中获取根路由

Symfony 5:如何从路由规则中获取选项数据

如何在 Symfony2 中获取控制器的所有路由列表?

在 Symfony2 路由中,如何设置可选的子域

如何在 symfony2 中禁用某些路由的监听器?

如何在Symfony中定义默认/ else路由?