当我配置Silex SecurityServiceProvider
以使用{_locale}
param时,login.check_path
会返回LogicException
,如下所示:
LogicException :控制器必须返回响应(给定null)。您是否忘记在控制器中的某处添加返回语句?
以下是我的设置:
$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_path
,check_path
和logout_path
的正确路由名称是什么,以便用于Twig {{ path() }}
方法,因为我无法弄明白到{_locale}
出席。
谢谢。
答案 0 :(得分:1)
今天遇到同样的问题:)并找到了这个解决方案:
将default_target_path
和always_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']);
....
});
也许有人通过重载事件监听器来获得更好的解决方案。但我认为这是一个快速的解决方案。