2017-09-11 10 views
0

Comment ajouter les paramètres régionaux actuels à des chemins comme/user/login ou/user/logout? Les contrôleurs prennent en charge l'espace réservé '{_locale}', mais dans le modèle de sécurité, il est signalé comme une erreur.Silex2: Pare-feu de sécurité et paramètres régionaux

$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, 
     ), 
    ), 
); 
+0

probablement vous avez besoin de fixer vos itinéraires comme celui-ci http://symfony.com/doc/current/translation/locale.html#translation-locale-url – sakhunzai

+1

Le composant de sécurité ne fonctionne pas avec le * _locale * espace réservé Mais il peut fonctionner avec des routes nommées, [vérifiez ceci] (https://github.com/silexphp/Silex/issues/1276) – mTorres

+0

@mTorres: Je ne vois aucune solution de 'chemin nommé' dans ce lien. Il existe une solution de contournement de session uniquement et quelqu'un mentionne les routes nommées, mais il n'explique pas comment les routes nommées peuvent résoudre le problème de modèle de sécurité. – root66

Répondre

0

La solution a été d'utiliser le nom de la route (de liaison du contrôleur) dans 'login_path', et non pas le chemin complet.

$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, 
    ) 
);