Silex重定向更改区域设置

时间:2016-08-19 08:57:06

标签: php redirect locale silex

我正在使用Silex 2,如果使用无效的区域设置加载任何网址,我想使用默认区域设置重定向到主页。

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

在中间件之前:

    // 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();
    }

但是这段代码会产生无限循环。

我想:

如果用户插入此URL:/ es / foo,则一切正常。

如果用户插入此URL:/ fr / foo,则必须将其重定向到/ en。

感谢。

1 个答案:

答案 0 :(得分: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);
    }

但我想更优雅地实施其他解决方案。

你觉得怎么样?