Symfony 路由问题,路由被忽略

Eme*_*ick 0 symfony1 routes

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

主页:
  网址:/
  参数:{ 模块:主要,操作:索引 }

默认索引:
  网址:/:模块
  参数:{ 操作:索引 }

默认:
  url: /:模块/:操作/*

sf_guard_寄存器:
  网址:/注册
  参数:{ 模块:用户,操作:注册 }

sf_guard_登录:
  网址:/登录
  参数:{ 模块:sfGuardAuth,操作:登录 }

sf_guard_signout:
  网址:/注销
  参数:{ 模块:sfGuardAuth,操作:注销 }

sf_guard_密码:
  网址:/请求密码
  参数:{ 模块:sfGuardAuth,操作:密码 }

当我尝试这条/register路线时,我得到了这个:

操作“注册/索引”不存在。

我应该指定,我没有“注册”模块,并且如果手动调用,我的用户模块运行良好。另外,其他路线也运行良好。

欢迎任何想法,谢谢!

phi*_*dah 5

与杰里米的回答一致:

因为你的default_index路由放在上面,going 会/register导致这条路由匹配。由于它位于sf_guard_register路线之前,因此只有第一个匹配“有效”。

你的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/*
Run Code Online (Sandbox Code Playgroud)

此外,您可能还需要遵循一些最佳实践:

  1. 禁用默认路由并仅依赖命名路由比让 symfony 在使用或帮助程序@homepage时找出要匹配的路由更快。因此,请禁用默认路由并自行创建路由。然后,在生成 URL 时使用路由名称。url_forlink_to
  2. 最常用的路由应该放在顶部,例如如果您在所有页面上都有注册链接,则应该放在sf_guard_register顶部。

只是我的 5 美分 - 希望你觉得它有用;-)