2013-04-29 69 views
5

類似於this問題,我需要一個單獨的登錄爲我的網站的管理和前端捆綁。管理員實際上是位於vendors中的一個單獨的包。Symfony2/FOSUserBundle - 路由問題與多個捆綁

現在,我的路由是這樣的:

應用程序/配置/ 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中的只是

+0

我有一個單一的包與後端單獨的登錄。我已經覆蓋了FOSUserBundle的loginAction。這個新動作爲管理員登錄提供了一個新模板。我的路由是「/ admin/login」,用於前端的後端和/登錄。我可以發佈源代碼,如果這是你正在尋找的。 – stwe 2013-04-29 17:00:54

回答

4

想通了:

由於FOSU​​serBundle與在config.yml我的管理防火牆註冊,它一直拖欠其路由即使我給他們改名。因此,將它們重新轉換爲fos_ *,並重命名站點捆綁包的路由似乎已修復它。

+1

那麼你的config.yml文件是怎麼樣的(你可以發佈它以及)?你用'fos_user'做了什麼'firewall_name'? – gondo 2014-04-23 14:16:38

+1

好吧,我想我找到了我正在尋找的東西。基本上它看起來像'fos_user。如果在FOSUser中打開了這個功能,那麼firewall_name'僅用於在成功註冊後重定向用戶。一定要正確測試這個! – gondo 2014-04-23 15:15:48