Php 通过JMSI18nRoutingBundle在URL中使用Symfony语言环境
我将Symfony 3.3与 捆绑包将用户区域设置放在路由前面。这工作很好,直到我必须登录或注销,这些都不工作 我总是遇到以下错误:Php 通过JMSI18nRoutingBundle在URL中使用Symfony语言环境,php,symfony,security,internationalization,Php,Symfony,Security,Internationalization,我将Symfony 3.3与 捆绑包将用户区域设置放在路由前面。这工作很好,直到我必须登录或注销,这些都不工作 我总是遇到以下错误: Unable to find the controller for path "/en/admin/logout". The route is wrongly configured. 这是my security.yml的一部分,涉及登录/注销: security: firewalls: main: anonymous: ~
Unable to find the controller for path "/en/admin/logout". The route is wrongly configured.
这是my 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 }
对于登录路径,请检查路径,等等。我也尝试过用{u locale}、.*和斜杠(/)代替,但都不起作用
管理员注销在my routing.yml中配置:
admin-logout:
path: /admin/logout
当使用path('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已经将区域设置占位符放在了路由前面(如果您确实将{u locale}放在了那里,那么最终的路由是:/en/en/admin/)
登录路径
和检查路径
在使用路径时不支持占位符(即/xy/{z}
)
您需要使用路线的名称并为任何占位符定义一个默认值
登录路径和检查路径也可以是路由名称(但不能有
强制通配符-例如/login/{foo},其中foo没有默认值
价值)
(Symfony文档-)
以下路由定义和安全配置示例将起作用:
# routing.yml
login_route_name:
path: /{_locale}/login
defaults:
_locale: 'en'
_controller: app.controller_service.security:login
login_check_route_name:
path: /{_locale}/login/check
defaults:
_locale: 'en'
_controller: app.controller_service.security:loginCheck
# security.yml
security:
firewalls:
firewall_name:
# [..]
form_login:
login_path: login_route_name
check_path: login_check_route_name
使用JMSi18nBundle时,您可以使用debug:router
命令查找登录/检查路由的名称。例如:
bin/console debug:router | grep -i login
谢谢!这就是我需要的。我没有在routing.yml中更改任何内容,但在我的security.yml中使用了路由名称(正如您所建议的),这就是所需的全部内容