Symfony2/FOSUserBundle - 使用多个捆绑包路由问题

Maj*_*ons 5 php user-management symfony

问题类似,我需要为我的网站的管理员和前端捆绑包单独登录.管理员实际上是一个独立的捆绑包vendors.

现在,我的路由看起来像:

应用程序/配置/ routing.yml中:

AcmeSiteBundle:
    resource: "@SiteBundle/Resources/config/routing.yml"
    prefix:   /

AcmeAdminBundle:
    resource: "@AdminBundle/Resources/config/routing.yml"
    prefix:   /admin/
Run Code Online (Sandbox Code Playgroud)

这两个bundle的各个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 }
Run Code Online (Sandbox Code Playgroud)

我的防火墙在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
Run Code Online (Sandbox Code Playgroud)

问题是前端自动生成的登录链接指向/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 }
Run Code Online (Sandbox Code Playgroud)

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 }
Run Code Online (Sandbox Code Playgroud)

$ 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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这是正确的唯一途径是进行用户注册,因为它位于这仅仅只是在SiteBundle的routing.yml中.

Maj*_*ons 4

弄清楚了:

由于 FOSUserBundle 已在 config.yml 中向我的管理防火墙注册,因此即使在我重命名它们之后,它仍然默认其路由。因此,将它们转回 fos_*,并重命名站点包的路由似乎已经解决了这个问题。