Symfony2.1:无法找到路径"/ login_check"的控制器

fal*_*sch 13 php symfony symfony-2.1

我使用symfony.com 的"使用传统登录表单"教程来验证我的用户身份.使用简单的http auth,它可以很好地工作.

提交登录后,我得到以下异常:

无法找到路径"/ login_check"的控制器.也许您忘了在路由配置中添加匹配路由?

好吧,在教程中我读到:

您不需要为/ login_check URL实现控制器,因为防火墙将自动捕获并处理提交到此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: /
Run Code Online (Sandbox Code Playgroud)

使用routing.yml

login:
    pattern:   /login
    defaults:  { _controller: VitaSecurityBundle:Default:login }
login_check:
    pattern:   /login_check
logout:
    pattern:   /logout
Run Code Online (Sandbox Code Playgroud)

Żab*_*jad 18

您遇到的问题在这里描述:

请参阅http://symfony.com/doc/current/book/security.html,"避免常见陷阱"部分

  1. 确保/login_check在防火墙后面接下来,确保您的check_path URL(例如/ login_check)位于您用于表单登录的防火墙后面(在此示例中,单个防火墙匹配所有URL,包括/ login_check).如果/ login_check与任何防火墙都不匹配,您将收到无法找到路径"/ login_check"异常的控制器.

在此示例中,您的模式为安全路径指定/ backend的前缀.要运行,您的登录检查应该在同一个防火墙后面.

因此,要匹配您在防火墙中指定的模式,请将login_check放在url路径上,如下所示:/ backend/login_check


fal*_*sch 8

我找到了解决问题的方法

我将/ 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 }
Run Code Online (Sandbox Code Playgroud)

使用routing.yml

login:
    pattern:   /backend/login
    defaults:  { _controller: VitaSecurityBundle:Default:login }
login_check:
    pattern:   /backend/login_check
logout:
    pattern:   /backend/logout
Run Code Online (Sandbox Code Playgroud)