Symfony2/FOSUserBundle - 多个包的路由问题
Posted
技术标签:
【中文标题】Symfony2/FOSUserBundle - 多个包的路由问题【英文标题】:Symfony2/FOSUserBundle - Route issues with multiple bundles 【发布时间】:2013-04-23 03:53:56 【问题描述】:类似于this 问题,我需要为我的站点的管理员和前端包单独登录。 admin 实际上是一个单独的包,位于 vendors
。
现在,我的路由看起来像:
app/config/routing.yml:
AcmeSiteBundle:
resource: "@SiteBundle/Resources/config/routing.yml"
prefix: /
AcmeAdminBundle:
resource: "@AdminBundle/Resources/config/routing.yml"
prefix: /admin/
两个包的单独 routing.yml 文件都有:
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile
fos_user_register:
resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
prefix: /register
fos_user_security_login:
pattern: /login
defaults: _controller: FOSUserBundle:Security:login
fos_user_security_check:
pattern: /login_check
defaults: _controller: FOSUserBundle:Security:check
fos_user_security_logout:
pattern: /logout
defaults: _controller: FOSUserBundle:Security:logout
还有我在 security.yml 中的防火墙:
firewalls:
main:
context: site
pattern: ^/admin/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /admin/login
check_path: /admin/login_check
logout:
path: /admin/logout
anonymous: true
frontend:
context: site
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /login
check_path: /login_check
logout:
path: /logout
anonymous: true
问题是前端自动生成的登录链接指向/admin/login
而不仅仅是/login
,这不是我想要发生的。
那么,当我在那里时,我怎样才能让它使用/admin/*
链接,而当我在前端时只使用/
链接?我需要保持他们的上下文链接,因为登录到管理端的人应该在前端保持登录状态。
编辑:我将路线重命名如下:
SiteBundle 的 routing.yml(和之前一样):
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile
fos_user_register:
resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
prefix: /register
fos_user_security_login:
pattern: /login
defaults: _controller: FOSUserBundle:Security:login
fos_user_security_check:
pattern: /login_check
defaults: _controller: FOSUserBundle:Security:check
fos_user_security_logout:
pattern: /logout
defaults: _controller: FOSUserBundle:Security:logout
AdminBundle 的 routing.yml:
_admin_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
_admin_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile
_admin_user_security_login:
pattern: /login
defaults: _controller: FOSUserBundle:Security:login
_admin_user_security_check:
pattern: /login_check
defaults: _controller: FOSUserBundle:Security:check
_admin_user_security_logout:
pattern: /logout
defaults: _controller: FOSUserBundle:Security:logout
$ app/console router:debug
显示:
fos_user_registration_register ANY ANY ANY /register/
fos_user_registration_check_email GET ANY ANY /register/check-email
fos_user_registration_confirm GET ANY ANY /register/confirm/token
fos_user_registration_confirmed GET ANY ANY /register/confirmed
fos_user_security_login ANY ANY ANY /admin/login
fos_user_security_check ANY ANY ANY /admin/login_check
fos_user_security_logout ANY ANY ANY /admin/logout
fos_user_profile_show GET ANY ANY /admin/profile/
fos_user_profile_edit ANY ANY ANY /admin/profile/edit
_admin_user_security_login ANY ANY ANY /admin/login
_admin_user_security_check ANY ANY ANY /admin/login_check
_admin_user_security_logout ANY ANY ANY /admin/logout
如您所见,唯一正确的路由是用户注册,这仅仅是因为它位于 SiteBundle 的 routing.yml 中刚刚。
【问题讨论】:
我有一个单独的捆绑包,后端有单独的登录名。我已经覆盖了 FOSUserBundle 的 loginAction。此新操作为管理员登录呈现一个新模板。我的路由是后端的“/admin/ login”和前端的/login。我可以发布源代码,如果那是你要找的。span> 【参考方案1】:想通了:
由于 FOSUserBundle 在 config.yml 中向我的管理防火墙注册,因此即使在我重命名它们之后,它仍然默认使用它的路由。因此,将它们转回 fos_*,并重命名 site 捆绑包的路由似乎已经修复了它。
【讨论】:
那么你的 config.yml 文件是什么样子的(你能把它也发布一下吗)?firewall_name
你用了什么fos_user
?
好的,我想我找到了我想要的东西。基本上看起来fos_user. firewall_name
仅用于在成功注册后重定向用户,如果在 FOSUser 中打开此功能。请务必正确测试!以上是关于Symfony2/FOSUserBundle - 多个包的路由问题的主要内容,如果未能解决你的问题,请参考以下文章