1

当我将 Silex 配置SecurityServiceProvider为使用{_locale}参数时,login.check_path返回LogicException如下:

LogicException:控制器必须返回响应(给定 null)。您是否忘记在控制器的某处添加 return 语句?

以下是我的设置:

$app->register(new Silex\Provider\SecurityServiceProvider, [
    'security.firewalls' => [
        'login' => [
            'pattern' => '^/{_locale}/login',
            'security' => false,
        ],
        'games' => [
            'pattern' => '^/{_locale}/modules/',
            'form' => [
                'login_path' => '/{_locale}/login',
                'check_path' => '/{_locale}/modules/login_check',
            ],
            'logout' => [
                'logout_path' => '/{_locale}/modules/logout',
            ],
            ...
        ],
        ...
    ],
]);

login_path和防火墙处理似乎工作正常,但无法完成登录过程。它出什么问题了?

我还问你正确的路线名称是什么login_pathcheck_path以及logout_path服务于 Twig{{ path() }}方法,因为我无法弄清楚由于{_locale}存在。

谢谢你。

4

1 回答 1

1

今天有同样的问题:)并找到了这个解决方案:

添加default_target_pathalways_use_default_target_path到您的security.firewalls表单配置。

'form' => array(
    'login_path' => '/',
    'check_path' => 'login_check',
    'default_target_path' => '/' . $app['locale'],
    'always_use_default_target_path' => true
),

编辑

所以使用$app['locale']效果不好。

最好在中间件中使用$app['session']->get('locale')并将区域设置设置为会话before

$app->before(function (Request $request) use ($app) {
    $app['session']->set('locale', $app['locale']);
    ....
});

也许有人通过重载事件侦听器有更好的解决方案。但我认为这是一个快速的解决方案。

于 2013-07-25T18:51:25.827 回答