Silex2:安全防火墙和语言环境
Silex2: Security firewall and locale
如何将当前语言环境添加到 /user/login 或 /user/logout 等路径?控制器确实支持“{_locale}”占位符,但在安全模式中它被报告为错误。
$app['security.firewalls'] = array(
'login' => array(
'pattern' => '^/user/login$',
),
'secured_area' => array(
'pattern' => '^.*$',
'anonymous' => false,
'remember_me' => array(),
'form' => array(
'login_path' => '/user/login',
'check_path' => '/user/login_check',
),
'logout' => array(
'logout_path' => '/user/logout',
'invalidate_session' => true,
),
),
);
解决方案是使用 'login_path' 中的路由名称(控制器绑定),而不是完整路径。
$app->get('/{_locale}/user/login', function(Request $request) use ($app) {
return $app['twig']->render('login.html.twig', array(
'error' => $app['security.last_error']($request),
));
})->bind('login');
$app['security.firewalls'] = array(
'login' => array(
'pattern' => '^/(de|en|fr|es)/user/login$',
),
'main' => array(
'pattern' => '^.*$',
'anonymous' => false,
'remember_me' => array(),
'form' => array(
'login_path' => 'login',
'check_path' => '/user/login_check',
'post_only' => true,
'with_csrf' => true,
'default_target_path' => 'homepage'
),
'logout' => array(
'logout_path' => '/user/logout',
'invalidate_session' => true,
)
);
如何将当前语言环境添加到 /user/login 或 /user/logout 等路径?控制器确实支持“{_locale}”占位符,但在安全模式中它被报告为错误。
$app['security.firewalls'] = array(
'login' => array(
'pattern' => '^/user/login$',
),
'secured_area' => array(
'pattern' => '^.*$',
'anonymous' => false,
'remember_me' => array(),
'form' => array(
'login_path' => '/user/login',
'check_path' => '/user/login_check',
),
'logout' => array(
'logout_path' => '/user/logout',
'invalidate_session' => true,
),
),
);
解决方案是使用 'login_path' 中的路由名称(控制器绑定),而不是完整路径。
$app->get('/{_locale}/user/login', function(Request $request) use ($app) {
return $app['twig']->render('login.html.twig', array(
'error' => $app['security.last_error']($request),
));
})->bind('login');
$app['security.firewalls'] = array(
'login' => array(
'pattern' => '^/(de|en|fr|es)/user/login$',
),
'main' => array(
'pattern' => '^.*$',
'anonymous' => false,
'remember_me' => array(),
'form' => array(
'login_path' => 'login',
'check_path' => '/user/login_check',
'post_only' => true,
'with_csrf' => true,
'default_target_path' => 'homepage'
),
'logout' => array(
'logout_path' => '/user/logout',
'invalidate_session' => true,
)
);