Routing Symfony路由问题,路由被忽略

Routing Symfony路由问题,路由被忽略,routing,symfony1,Routing,Symfony1,我的app/frontend/config/routing.yml中有以下内容: homepage: url: / param: { module: main, action: index } default_index: url: /:module param: { action: index } default: url: /:module/:action/* sf_guard_register: url: /register param:

我的
app/frontend/config/routing.yml中有以下内容:

homepage: url: / param: { module: main, action: index } default_index: url: /:module param: { action: index } default: url: /:module/:action/* sf_guard_register: url: /register param: { module: user, action: register } sf_guard_signin: url: /login param: { module: sfGuardAuth, action: signin } sf_guard_signout: url: /logout param: { module: sfGuardAuth, action: signout } sf_guard_password: url: /request_password param: { module: sfGuardAuth, action: password } 主页: 网址:/ 参数:{module:main,action:index} 默认索引: url:/:模块 参数:{action:index} 违约: url:/:模块/:操作/* sf\U保护\U寄存器: url:/register 参数:{module:user,action:register} 安全警卫签字: url:/login 参数:{module:sfGuardAuth,action:signin} sf_警卫_签出: url:/注销 参数:{module:sfGuardAuth,action:signout} sf\u保护\u密码: url:/request\u密码 参数:{module:sfGuardAuth,action:password} 当我尝试
/register
路线时,我得到以下结果:

操作“寄存器/索引”不存在

我应该指定,我没有“注册”模块,如果手动调用,我的用户模块工作正常。另外,其他路线也很好


欢迎任何意见,谢谢

路由按照它们在
routing.yml
文件中列出的顺序进行处理。因此,url/寄存器在到达sf\U guard\U寄存器之前匹配默认的索引路由。默认索引和默认值都应该放在
routing.yml
文件的底部。

路由按照它们在
routing.yml
文件中列出的顺序进行处理。因此,url/寄存器在到达sf\U guard\U寄存器之前匹配默认的索引路由。默认索引和默认值都应该放在
routing.yml
文件的底部。

与jeremy的答案一致:

由于您的
默认\u索引
路由位于上方,因此转到
/register
会使此路由匹配。由于它位于
sf\u-guard\u寄存器
路由之前,因此只有第一个匹配项“计数”

您的routing.yml应如下所示:

sf_guard_register:
  url: /register
  param: { module: user, action: register }

sf_guard_signin:
  url: /login
  param: { module: sfGuardAuth, action: signin }

sf_guard_signout:
  url: /logout
  param: { module: sfGuardAuth, action: signout }

sf_guard_password:
  url: /request_password
  param: { module: sfGuardAuth, action: password }

homepage:
  url: /
  param: { module: main, action: index }

default_index:
  url: /:module
  param: { action: index }

default:
  url: /:module/:action/*
此外,您可能希望遵循一些最佳实践:

  • 禁用默认路由并仅依赖命名路由(如
    @homepage
    )比让symfony在使用
    url\u作为
    链接到
    帮助程序时找出要匹配的路由要快。因此,请禁用默认路由并自己创建路由。然后,在生成URL时使用路由的名称
  • 最常用的路由应该放在顶部,例如,如果所有页面上都有寄存器链接,则应该将
    sf\u guard\u register
    放在顶部

  • 就我的5美分-希望你觉得有用;-)

    与杰里米的回答一致:

    由于您的
    默认\u索引
    路由位于上方,因此转到
    /register
    会使此路由匹配。由于它位于
    sf\u-guard\u寄存器
    路由之前,因此只有第一个匹配项“计数”

    您的routing.yml应如下所示:

    sf_guard_register:
      url: /register
      param: { module: user, action: register }
    
    sf_guard_signin:
      url: /login
      param: { module: sfGuardAuth, action: signin }
    
    sf_guard_signout:
      url: /logout
      param: { module: sfGuardAuth, action: signout }
    
    sf_guard_password:
      url: /request_password
      param: { module: sfGuardAuth, action: password }
    
    homepage:
      url: /
      param: { module: main, action: index }
    
    default_index:
      url: /:module
      param: { action: index }
    
    default:
      url: /:module/:action/*
    
    此外,您可能希望遵循一些最佳实践:

  • 禁用默认路由并仅依赖命名路由(如
    @homepage
    )比让symfony在使用
    url\u作为
    链接到
    帮助程序时找出要匹配的路由要快。因此,请禁用默认路由并自己创建路由。然后,在生成URL时使用路由的名称
  • 最常用的路由应该放在顶部,例如,如果所有页面上都有寄存器链接,则应该将
    sf\u guard\u register
    放在顶部

  • 就我的5美分-希望你觉得有用;-)

    您甚至应该删除两条默认路线:

    default_index:
      url: /:module
      param: { action: index }
    
    default:
      url: /:module/:action/*
    
    因为使用它们是不好的做法,所以应该始终创建特定的路线

    添加路由的最佳方法是将它们预先添加到您的文件中,在最顶端添加每个新路由

    另外,在前端调试路由的一个好方法是运行:

    symfony app:routes frontend
    

    因此,您将看到wich route maches是什么(及其要求,如果有的话)

    您甚至应该删除2条默认路线:

    default_index:
      url: /:module
      param: { action: index }
    
    default:
      url: /:module/:action/*
    
    因为使用它们是不好的做法,所以应该始终创建特定的路线

    添加路由的最佳方法是将它们预先添加到您的文件中,在最顶端添加每个新路由

    另外,在前端调试路由的一个好方法是运行:

    symfony app:routes frontend
    

    因此,您将看到wich route maches是什么(以及它的要求,如果有的话)

    非常感谢,您的解决方案是有效的,您的建议非常明智。:)非常感谢,您的解决方案很有效,您的建议也很明智。:)