Php 这个Symfony2路由器配置正确吗?

Php 这个Symfony2路由器配置正确吗?,php,symfony,url-routing,Php,Symfony,Url Routing,我被要求修复一个客户网站上损坏的联系人表单。提交表单时,emailsend操作应该被触发,但它似乎不起作用。我已经检查了路由器,在我看来,/contact有两条路由,这意味着此操作永远不会被触发,因为具有该路径的另一条路由已经满足了要求。我对这一点的理解正确吗?如果是这样的话,我就不明白为什么以前的联系方式是有效的 foo_core_homepage: path: / defaults: { _controller: FooCoreBundle:Default:index

我被要求修复一个客户网站上损坏的联系人表单。提交表单时,
emailsend
操作应该被触发,但它似乎不起作用。我已经检查了路由器,在我看来,
/contact
有两条路由,这意味着此操作永远不会被触发,因为具有该路径的另一条路由已经满足了要求。我对这一点的理解正确吗?如果是这样的话,我就不明白为什么以前的联系方式是有效的

foo_core_homepage:
    path:     /
    defaults: { _controller: FooCoreBundle:Default:index }

foo_core_ourwork:
    path:     /work
    defaults: { _controller: FooCoreBundle:Default:clients }

foo_core_services:
    path:     /services
    defaults: { _controller: FooCoreBundle:Default:services }
​
foo_core_contact:
    path:     /contact
    defaults: { _controller: FooCoreBundle:Default:contactMobile }
​
foo_core_findus:
        path:     /findus
        defaults: { _controller: FooCoreBundle:Default:findus }

foo_core_email_send:
    path:   /contact
    defaults: { _controller: FooCoreBundle:Default:emailsend }

您是对的,使用相同路径的两条路线中的一条将不可用。
您可以使用
debug:router
命令检查它们中的哪一个,但这肯定是最后一个

区分它们的方法是定义不同的需求,如下所示:

foo_core_contact:
    path:     /contact
    defaults: { _controller: FooCoreBundle:Default:contactMobile }
    requirements:
        methods: GET​

foo_core_email_send:
    path:   /contact
    defaults: { _controller: FooCoreBundle:Default:emailsend }
    requirements:
        methods: POST

注意:我不知道您的表单是如何显示的,处理方式也是如此,因此您在提交时不会遇到关于调用或不是好路由的其他问题。

路由按定义顺序进行评估。当找到匹配项时,它会停止搜索,选择该路线并运行它。您需要定义从最严格到最不严格的路线,以避免此类问题。谢谢。我没有写这个路由器,事实上我以前很少使用Symfony。最后一条路线永远不会匹配,对吗?是的,
foo\u core\u email\u send
永远不会被称为hanks,我会这样做。我不确定这本来是怎么工作的!也许他们只是没有注意到他们没有收到任何电子邮件/不客气!如果问题仍然存在,请不要犹豫地问另一个问题,我很乐意帮助您调试它。