2013-04-29 4 views
5

Как и проблема this, мне нужен отдельный логин как для админ, так и для интерфейсных узлов моего сайта. Администратор фактически представляет собой отдельный пакет, расположенный в vendors.Symfony2/FOSUserBundle - Проблемы с маршрутом с несколькими пучками

Сейчас мой маршрутизации выглядит следующим образом:

приложение/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/*, когда я там, но только ссылки /, когда я нахожусь на переднем конце? Мне нужно, чтобы их контексты были связаны, поскольку пользователи, входящие в админку, должны войти в систему на передней панели.


EDIT: я переименовал мои маршруты как:

routing.yml SiteBundle (в те же, как и раньше):

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 } 

routing.yml AdminBundle в:

_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 

Как вы можете видеть, единственный правильный путь - это регистрация пользователя, и только потому, что он находится только в routing.yml SiteBundle.

+0

У меня есть один комплект с отдельным логином для бэкэнда. Я перезаписал loginAction из FOSUserBundle. Это новое действие отображает новый шаблон для входа администратора. Мои маршруты: «/ admin/login» для бэкэнд и/login для интерфейса. Я могу опубликовать исходный код, если это то, что вы ищете. – stwe

ответ

4

Фигурного это:

Поскольку FOSUserBundle был зарегистрирован с моим администратором брандмауэра в config.yml, он продолжал недобросовестный свои маршруты, даже после того, как я переименовал их. Итак, перевернув их обратно в fos_ *, переименование сайта , похоже, исправило его.

+1

, так как выглядит ваш файл config.yml (можете ли вы отправить его также)? какой 'firewall_name' вы использовали для' fos_user'? – gondo

+1

ok Я думаю, я нашел его, что искал. в основном это выглядит как 'fos_user. firewall_name' используется для перенаправления пользователей после успешной регистрации, если это включено в FOSUser. обязательно проверьте это правильно! – gondo

Смежные вопросы