check_path не найден с несколькими брандмауэрами в Symfony 2

Я пытаюсь настроить брандмауэр и внешнюю систему брандмауэра в Symfony 2. У меня есть две формы входа, одна для интерфейса и еще одна для панели управления администратора. Различные поставщики и так далее. Моя конфигурация выглядит так:

security: firewalls: backend: pattern: ^/admin anonymous: true provider: admin_users form_login: login_path: /admin/login check_path: /admin/login_check default_target_path: /admin secured_area: pattern: ^/ provider: normal_users anonymous: true form_login: ~ access_control: - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin, roles: ROLE_ADMIN } - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

И мой routing.yml:

 login: path: /login defaults: { _controller: MyFrontendBundle:Default:login } login_check: path: /login_check admin_login: path: /admin/login defaults: { _controller: MyBackendBundle:Default:login } admin_login_check: path: /admin/login_check 

Похоже, но у меня есть следующая ошибка: Не удалось найти контроллер для пути / admin / login_check. Возможно, вы забыли добавить соответствующий маршрут в свою конфигурацию маршрутизации

Есть идеи? 🙂

Это решение я использую в своих проектах. Надеюсь, что это будет работать и с двумя формами входа.

Добавить заглушку для контроллера

 admin_login_check: path: /admin/login_check defaults: { _controller: AcmeDemoBundle:Default:adminLoginCheck } 

Действие заглушки. Это действие никогда не будет достигнуто, но ошибка «контроллер не найден» исчезнет.

 // src/Acme/DemoBundle/Controller/DefaultController.php public function adminLoginCheckAction() { return $this->redirect($this->generateUrl('admin_login')); } 

Ваше картографирование URL-адресов кажется правильным,

Проверьте, есть ли у вас правильный check_path (/admin/login_check) в контроллере администратора.

или

Попробуйте добавить login_check под access_control, как показано ниже,

 - { path: ^/admin/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

У меня была аналогичная проблема, когда я пытался использовать брандмауэры с перекрывающимися шаблонами url. У первого брандмауэра не было check_path (я использовал http_basic в первом брандмауэре), а во втором firwall я использовал form_login. Мне пришлось менять URL-адреса.

Может быть, не плохо, чтобы удалить «/», поэтому у вас есть только:

 login_path: admin/login check_path: admin/login_check default_target_path: admin 

И пусть атрибут шаблона будет таким, каким он есть. На самом деле, как выглядит мой security.yml и объясняет проблему маршрута.