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