【发布时间】:2017-10-13 11:20:18
【问题描述】:
我将 Symfony 3.3 与 JMSI18nRoutingBundle 结合使用。
捆绑包将用户区域设置在路由前面。这工作正常,直到我必须登录或注销,这些都不起作用。
我总是收到以下错误:
Unable to find the controller for path "/en/admin/logout". The route is wrongly configured.
这是我的 security.yml 的一部分,涵盖登录/注销:
security:
firewalls:
main:
anonymous: ~
pattern: ^.*/admin
form_login:
login_path: /{_locale}/admin/login
check_path: /{_locale}/admin/login
[...]
logout:
path: /{_locale}/admin/logout
target: /{_locale}/admin/login
access_control:
- { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_ADMIN }
对于 login_path、check_path 等。我也尝试过代替 {_locale}、.* 和斜杠 (/),但这些都不起作用。
admin-logout 在我的 routing.yml 中配置:
admin-logout:
path: /admin/logout
这会在树枝中正确呈现,当使用路径('admin-logout')时,我会得到一个包含语言环境的 URL,但是当我单击它时,它只会再次显示上述错误消息。 登录也不起作用,但是我可以显示登录页面,但是在输入凭据后,它只是刷新页面而没有登录。
有人知道如何让登录/注销再次正常工作吗?
编辑:
感谢 nifr 我可以解决它,我应该使用路由名称,而不是 security.yml 中的路径,这就是我最终得到的:
security:
firewalls:
main:
anonymous: ~
pattern: admin
form_login:
login_path: admin-login
check_path: admin-login
[...]
logout:
path: admin-logout
target: admin-login
[...]
我没有更改 routing.yml 中的任何内容,因为 JMSI18nRoutingBundle 已经将语言环境占位符放在路由前面(如果您确实将 {_locale} 放在那里,您最终会得到如下路由:/en/en/admin /)
【问题讨论】:
标签: php symfony security internationalization