Symfony2.1: невозможно найти контроллер для пути "/ login_check"

Я использовал учебник «Использование традиционной формы входа в систему» от symfony.com для аутентификации моих пользователей. С помощью простого http auth он отлично работает.

После того как логин был отправлен, я получаю это исключение:

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

Ну, в учебнике я читал:

Вам не нужно будет внедрять контроллер для URL / login_check, поскольку брандмауэр автоматически поймает и обработает любую форму, представленную на этот URL.

Я определил маршруты и установил настройки брандмауэра:

security.yml

firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false backend: pattern: ^/backend anonymous: ~ form_login: provider: entity login_path: /login check_path: /login_check #use_forward: true logout: path: /logout target: / 

routing.yml

 login: pattern: /login defaults: { _controller: VitaSecurityBundle:Default:login } login_check: pattern: /login_check logout: pattern: /logout 

Related of "Symfony2.1: невозможно найти контроллер для пути "/ login_check""

Проблема, с которой вы сталкиваетесь, описана здесь:

См. http://symfony.com/doc/current/book/security.html , раздел «Избегайте общих ошибок»

  1. Убедитесь, что /login_check находится за брандмауэром. Затем убедитесь, что ваш URL-адрес check_path (например, / login_check) находится за брандмауэром, который вы используете для входа в форму (в этом примере один брандмауэр соответствует всем URL-адресам, включая / login_check). Если / login_check не соответствует любому брандмауэру, вы получите сообщение «Невозможно найти контроллер для исключения пути» / login_check.

В этом примере ваш шаблон указывает префикс / backend для защищенных путей. Чтобы работать, ваша проверка входа должна быть за этим же брандмауэром.

Итак, чтобы соответствовать шаблону, который вы указали в своем брандмауэре, поместите login_check на путь URL-адреса следующим образом: / backend / login_check

Я нашел решение своей проблемы

Я добавил префикс / backend к моим путям, удалил строку «anonymous: ~» и закомментировал ACL для бэкэнд.

security.yml

  firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false login_firewall: pattern: ^/backend/login$ anonymous: ~ backend: pattern: ^/backend form_login: provider: entity login_path: /backend/login check_path: /backend/login_check #use_forward: true logout: path: /backend/logout target: / access_control: #- { path: ^/backend, roles: ROLE_USER } 

routing.yml

 login: pattern: /backend/login defaults: { _controller: VitaSecurityBundle:Default:login } login_check: pattern: /backend/login_check logout: pattern: /backend/logout 

Проблема также имеет место, когда у вас есть два брандмауэра с одинаковым шаблоном. Например:

 .... backend: pattern: ^/* .... frontend: pattern: ^/* 

Вы должны изменить один из следующих:

 .... backend: pattern: ^/(administrador|backend)/* .... frontend: pattern: ^/* 

Вот пример кода, который я использовал в реальном проекте:

 firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false secured_area: pattern: ^/cmd anonymous: ~ form_login: check_path: /cmd/login_check login_path: /cmd/login remember_me: always_remember_me: true key: "%secret%" path: /cmd domain: ~ # Defaults to the current domain from $_SERVER logout: path: /cmd/logout target: / admin: pattern: ^/admin http_basic: realm: "Administration" free_area: pattern: ^/ anonymous: ~ 

В моем случае защищена только часть / cmd /, часть / admin / part также защищена, но с защитой HTTP.

Возможно, вам стоит попробовать: security.yml

 firewalls: dev: pattern: ^/(_(profiler|wdt)|css|images|js)/ security: false backend: pattern: ^/backend anonymous: ~ form_login: provider: entity login_path: /backend/login check_path: /backend/login_check #use_forward: true logout: path: /backend/logout target: / 

и с точки зрения маршрутизации.yml:

 login: pattern: /backend/login defaults: { _controller: VitaSecurityBundle:Default:login } login_check: pattern: /backend/login_check logout: pattern: /backend/logout 

Я думаю, что ваша проблема может возникнуть из-за того, что безопасность не активирована в вашей / части (шаблон вашей защищенной области – ^ / backend)

Это не работало для меня, и я пробую что-то еще:

 firewalls: dev: pattern: ^/(_profiler|_wdt|css|js) security: false login: pattern: ^/login$ security: false secured_area: pattern: /(admin/.*|login_check) provider: in_memory form_login: check_path: /login_check login_path: /login default_target_path: /admin always_use_default_target_path: true logout: path: /logout target: / access_control: - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/, roles: ROLE_ADMIN } 

Со следующим объяснением, проще, чем объяснение от zabojad. Важно поставить маршрут login_check внутри брандмауэра и разрешить вход на внешний сервер. С помощью или шаблона вы можете добиться успеха.

Максимум