2017-09-11 5 views
0

現在のロケールを/ user/loginや/ user/logoutなどのパスに追加するにはどうすればよいですか?コントローラは '{_locale}'プレースホルダをサポートしますが、セキュリティパターン内ではエラーとして報告されます。Silex2:セキュリティファイアウォールとロケール

$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

おそらくあなたは、このようなあなたのルートを修正する必要がありhttp://symfony.com/doc/current/translation/locale.html#translation-locale-url – sakhunzai

+1

セキュリティコンポーネントは、*から_locateでは動作しません*プレースホルダ。しかし、それは名前付きルートでも動作します。[こちらをチェックしてください](https://github.com/silexphp/Silex/issues/1276) – mTorres

+0

@mTorres:このリンクには名前付きルートの解決策はありません。セッションの回避策のみがあり、誰かが名前付きルートについて言及していますが、名前付きルートがセキュリティパターンの問題をどのように解決できるかは説明していません。 – root66

答えて

0

解決方法は、完全パスではなく、「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, 
    ) 
); 
関連する問題