在Symfony 2中找不到多个防火墙的check_path

时间:2014-03-10 18:27:56

标签: php symfony

我正在尝试在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”的控制器。也许您忘记在路由配置中添加匹配路由

有什么想法吗? :)

3 个答案:

答案 0 :(得分:2)

我在项目中使用的这个解决方案。希望这也适用于两种登录表单。

为控制器添加存根

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'));
}

答案 1 :(得分:2)

您的网址映射似乎是正确的,

请检查管理员控制器中是否有check_path (/admin/login_check)

尝试在access_control下添加login_check,如下所示,

- { path: ^/admin/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY }
当我尝试使用具有重叠url模式的防火墙时,我遇到了类似的问题。第一个防火墙没有check_path(我在第一个防火墙中使用http_basic)而在第二个firwall中我使用的是form_login。我不得不改变URL映射。

答案 2 :(得分:2)

仅仅删除“/”可能不错,所以你只有:

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

让模式以它的方式归属。这实际上是我security.yml的样子,并解释了路线问题。