如果没有默认控制器/操作,登录check_path路由如何工作?

sar*_*nan 28 yaml symfony symfony-2.3 symfony-routing

我正在研究具有以下路由代码的symfony 2.3项目

just2_frontend_logincheck:
    pattern:   /login_check
Run Code Online (Sandbox Code Playgroud)

它没有

defaults:{ _controller: testBundle:User:login }
Run Code Online (Sandbox Code Playgroud)

但它正在发挥作用.但我不知道路由是如何工作的.可能吗?请告诉我有关路由的信息.

Nic*_*ich 47

check_path路线/路径使用防火墙赶上登录请求.

永远不会真正访问此路线的操作.这是您的登录表单发布到的路由/网址,请求应由您的防火墙提供商服务处理.

如果check_path正在执行路由的操作,则防火墙出现问题(防火墙不会处理该请求).

正如你在这里看到的那样, FOSUserBundle的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
Run Code Online (Sandbox Code Playgroud)

在引擎盖下,symfony调用authenticate()服务的方法your_provider_service来检查提供的凭据.

您可以使用以下命令找到用作提供者服务的类:

app/console debug:container --show-private your_provider_service 
Run Code Online (Sandbox Code Playgroud)