我正在使用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。
感谢。
答案 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);
}
但我想更优雅地实施其他解决方案。
你觉得怎么样?