Silex2: брандмауэр безопасности и локали

Как добавить текущую локаль к таким путям, как /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,
 ),
 ),
 );
1 ответ

Решение состояло в том, чтобы использовать имя маршрута (привязка контроллера) в '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,
 )
);

licensed under cc by-sa 3.0 with attribution.