【问题标题】:How to declare both method in routing.yml Symfony2?如何在 routing.yml Symfony2 中声明这两种方法?
【发布时间】:2014-05-22 10:08:18
【问题描述】:

我想在我的 routing.yml 中为同一路由声明 GETPOST 方法。

根据the documentation,可以使用这样的注释:

/**
 * @Route("/edit/{id}")
 * @Method({"GET", "POST"})
 */

但是如何 YAML 呢?我尝试了不同的东西:

contact_envoi:
    pattern:  /contact-envoi
    defaults: { _controller: AcmeDemoBundle:Default:contactEnvoi }
    requirements:
        sf_method: ['get','post']

...
    requirements:
        _method: { 'GET', 'POST' }

但它仍然不起作用......请帮助,我在文档中没有找到任何关于此的内容。

【问题讨论】:

  • 从 Symfony 2.2 开始,声明方法需求的方式发生了变化。从requirements._method:methods:。您需要使用contact_envoi.methods: ['GET', 'POST']

标签: symfony routing yaml http-method


【解决方案1】:

感谢 Touki 的评论,它成功了!

我必须在两个单独的共享上声明两次相同的 URL,每个共享都有自己的方法,如 Symfony 2.1 的 here 和 Symfony 2.2 的 here 所述。

contact:
    path:     /contact
    defaults: { _controller: AcmeDemoBundle:Main:contact }
    methods:  [GET]

contact_process:
    path:     /contact
    defaults: { _controller: AcmeDemoBundle:Main:contactProcess }
    methods:  [POST]

【讨论】:

    【解决方案2】:

    您可以使用 GET 和 POST 方法获得相同的路由。

    contact:
    path:     /contact
    defaults: { _controller: AcmeDemoBundle:Main:contact }
    methods:  ['GET','POST']
    

    然后在你的控制器中管理使用的方法。

    public function contactAction(Request $request)
    {
        if ('POST' === $request->getMethod()) {
            ..
        }
    }
    

    【讨论】:

      【解决方案3】:

      只需删除方法

      contact:
        path:     /contact
        defaults: { _controller: AcmeDemoBundle:Main:contact }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        • 2021-09-28
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多