2013-07-01 4 views
24

Я работаю над проектом Symfony 2.3, имеющий следующий код маршрутизацииКак работает маршрут проверки login_path без контроллера/действия по умолчанию?

just2_frontend_logincheck: 
    pattern: /login_check 

Он не имеет

defaults:{ _controller: testBundle:User:login } 

Но это работает. Но я не знаю, как работает маршрутизация. Является ли это возможным? Пожалуйста, посоветуйте мне о маршрутизации.

ответ

42

check_path route/path используется вашим брандмауэром для регистрации запросов на вход.

Действие этого маршрута никогда не доступно. Это маршрут/URL-адрес ваших сообщений в форме входа в систему, и запрос должен обрабатываться службой поставщика брандмауэра.

Если действие маршрута check_path выполняется, в брандмауэре что-то не так (запрос не обрабатывается вашим брандмауэром).

Как вы можете видеть here FOSUserBundle "S check_path направляется SecurityController::checkAction и просто бросает RuntimeException.

Конфигурация check_path можно найти в app/config/security.yml под security.firewalls.<firewallname>.form_login.check_path.

Это может быть либо шаблон как /login_check или, как в вашем случае название маршрута т.е. just2_frontend_logincheck но нет никакого основного действия.

security: 
    providers: 
     your_provider_name: your_provider_service # authentication provider 
     # ... 

    firewalls:         # Required 
     your_firewall_name: 
      # ... 

      provider: your_provider_name 
      form_login:    
       check_path: /login_check  # submit the login form here 
               # in your case a route name: 
               # just2_frontend_logincheck 

Под капотом symfony вызывает метод authenticate() службы your_provider_service, чтобы проверить предоставленные учетные данные.

Вы можете найти класс, используемый в качестве поставщика-службы с помощью:

app/console container:debug --show-private your_provider_service 
+0

Спасибо УИ очень nifr – saravanan

+0

Где начать отладку, если маршрут * не * обрабатывается брандмауэром? – hchr

+0

@hchr - начать тестирование, так как маршрут 'check_path' существует, отлаживая маршрутизатор примерно так:' app/console debug: router | grep -i '. Затем закомментируйте/отключите все, кроме одного брандмауэра под 'security.firewalls', и уменьшите конфигурацию одного брандмауэра до ** минимального **. Мой ответ показывает минимальный пример, который должен быть достаточным, чтобы поймать запрос в '/ login_check' – nifr

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