2016-08-19 4 views
0

私はSilex 2を使用しています。無効なロケールを使用してURLがロードされた場合、デフォルトのロケールでホームページにリダイレクトしたいと思います。Silexリダイレクトロケールの変更

// i18n Control 
    $locale = $request->getLocale(); 
    $allowLocale = ['en','es','de']; 
    if (!in_array($locale, $allowLocale)) { 
     $request->setLocale('en'); 
     $response = new \Symfony\Component\HttpFoundation\RedirectResponse($app['url_generator']->generate('homepage'), 301); 
     $response->prepare($request); 
     return $response->send(); 
    } 

しかし、このコードは無限ループを生成します:ミドルウェア前

// homepage/root 
    $this->get('{_locale}/', function (Request $request) use ($app) { 
     return $app['twig']->render('index/index.html.twig', array()); 
    })->bind('homepage'); 

私がしたい:

ユーザーはこのURLを挿入する場合:/ ESの/ fooのすべてがOKです。

このURLを/ fr/fooと入力すると、/ enにリダイレクトする必要があります。

ありがとうございました。

答えて

0

url_generatorサービスにURLパラメータを渡すのと同じ操作を行うことはできますが、簡単に行うことができます。また、あなたのアプリケーションをより柔軟にするとエラーが発生しにくいために、あなたは(allowedLocalesdefaultLanguageのために)グローバル設定用のコンテナをembarace必要があります。

// somewhere in your configuration 
$app['defaultLanguage'] = 'en'; 
$app['allowedLocales'] = ['en','es','de'] 

// Then in your controller 
$locale = $request->getLocale(); 
if (!in_array($locale, $app['allowLocales'])) { 

    $request->setLocale($app['defaultLanguage']); 
    $app['translator']->setLocale($app['defaultLanguage']); 

    return $app->redirect(
     $app['url_generator']->generate('homepage', ["locale" => $app['defaultLanguage']]), 
     301 
    ); 
} 
0

私は、このソリューションを発見した:

$locale = $request->getLocale(); 
    $allowLocale = ['en','es','de']; 
    if (!in_array($locale, $allowLocale)) { 
     $defaultLanguage = 'en'; 
     $targetUrl = $app['url_generator']->generate('homepage'); 

     $request->setLocale($defaultLanguage); 
     $app['translator']->setLocale($defaultLanguage); 

     $targetUrl = str_replace("/$locale/", "/$defaultLanguage/", $targetUrl); 

     return $app->redirect($targetUrl, 301); 
    } 

をしかし、私はよりエレガントな、他のソリューションを実装したいと思います。

あなたはどう思いますか?

+0

あなたがより簡単に、以下の私の答えを確認することを行うことができます... – mTorres

+0

あなたの貢献をありがとう、それは私にとって有用でした。 – cybtow

関連する問題