silex如何正确配置多个防火墙?

How to configure multiple firewalls correctly in silex?

我正在开发一个项目,我希望有两个登录表单,一个用于系统的管理区域,另一个用于访问客户端,我配置了以下防火墙

'admin'       =>  array(
    'pattern'   =>  '^/.*$',
    'anonymous' =>  true,
    'form'      =>  array(
        'login_path' => '/',
        'check_path' => '/login_check',
        'default_target_path' => '/dashboard',
        'always_use_default_target_path' => true,
        'username_parameter' => 'username',
        'password_parameter' => 'password',
        'csrf_parameter' => 'login_token',
        'failure_path' => '/',
    ),
    'logout'    =>  array(
        'logout_path' => '/logout',
        'target' => '/'
    ),
    'users' => $app->factory(function () use ($app) {
        return new Lib\Provider\UserProvider($app);
    })
),
'clients'      =>  array(
    'pattern'   =>  '^/clients',
    'anonymous' =>  true,
    'form'      =>  array(
        'login_path' => '/clients/login',
        'check_path' => '/clients/login_check',
        'default_target_path' => '/clients/admin',
        'always_use_default_target_path' => true,
        'username_parameter' => 'username',
        'password_parameter' => 'password',
        'csrf_parameter' => 'login_token',
        'failure_path' => '/clients',
    ),
    'logout'    =>  array(
        'logout_path' => '/clients/logout',
        'target' => '/clients/login'
    ),
    'users' => $app->factory(function () use ($app) {
        return new Lib\Provider\ClientProvider($app);
    })
)

admin firewall 中的 'check_path' => '/login_check' 工作正常,但是当你想转到由 check_path 生成的 url 时客户端防火墙它标记以下错误

NotFoundHttpException in HttpKernel.php line 134:    
Unable to find the controller for path "/clients/login_check". The route is wrongly configured.

我搜索了几个小时,我无法更正这个错误,非常感谢您帮助解决这个问题

谢谢

您的 "clients" 部分的 check_path 似乎不在防火墙后面。由于在定义多个防火墙时顺序很重要(第一个匹配模式获胜),我敢打赌您的 "admin" 防火墙模式已经捕获了所有 URL,因此“/clients”URL 被这个捕获"clients" 个中的一个。

也许尝试使用 "admin" 前缀临时重命名您的管理路由,相应地修改防火墙(使用捕获所有“/admin/...”的模式)并告诉我们它是否解决了您的问题,或者如果返回的错误发生了变化。

编辑: 或者只是改变你的两个防火墙的顺序,让客户的防火墙在管理员的之前匹配路由。

干杯。