自动将用户重定向到本地页面

时间:2014-06-05 12:37:01

标签: php symfony localization listener

我想重定向用户:

  • 英文用户:www.website.com/en /
  • 法国用户:www.website.com/fr /

如果用户不是法语或英语,则默认重定向为:www.website.com/en /

目前,我创建了一个LocaleListener

昏暗\ MxBundle \监听\ LocaleListener.php:

class LocaleListener implements EventSubscriberInterface
{
  private $defaultLocale;

  public function __construct($defaultLocale, $availableLocales, $container)
  {
    $this->defaultLocale = $defaultLocale;
    $this->availableLocales = $availableLocales;
    $this->container= $container;
  }

  public function onKernelRequest(GetResponseEvent $event)
  {
    $request = $event->getRequest();

    if (!$request->hasPreviousSession()) 
    {
      $locale = $event->getRequest()->getPreferredLanguage($this->availableLocales);
      $event->getRequest()->setLocale($locale);

      $Session = $this->container->get('session');
      $Session->set('_locale', $locale);

      return;
    }

    # try to see if the locale has been set as a _locale routing parameter
    if ($locale = $event->getRequest()->getPreferredLanguage($this->availableLocales)) {
      $request->getSession()->set('_locale', $locale);

    } else {
      # if no explicit locale has been set on this request, use one from the session
      $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale));
    }
  }

  public static function getSubscribedEvents()
  {
    return array(
      // must be registered before the default Locale listener
      KernelEvents::REQUEST => array(array('onKernelRequest', 17)),
    );
  }
}

的Symfony /应用/配置/ routing.yml中:

dim_mx:
    resource: "@DimMxBundle/Resources/config/routing.yml"
    prefix:   /

dim_mx:
    resource: "@DimMxBundle/Resources/config/routing.yml"
    prefix:    /{_locale}/
    requirements:
        _locale: en|fr   
root:
    pattern: /
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /%locale%/
        permanent: true

总而言之,如果是英语用户,我想将用户重定向到www.website.com/en/,如果是法国用户,我想将用户重定向到www.website.com/fr/。目前,所有用户都被重定向到/ en /.

谢谢大家的帮助。

2 个答案:

答案 0 :(得分:0)

为解决我的问题,我安装了jmsI18nRoutingBundle Bundle。

http://jmsyst.com/bundles/JMSI18nRoutingBundle

谢谢大家的时间。 最好的问候,迪米特里

答案 1 :(得分:-1)

要使用php重定向某人,您可以使用void header ( string $string [, bool $replace = true [, int $http_response_code ]] )函数,您只需要知道它们来自何处,然后您可以将它们重定向为使用者,如

header('Location:  http://www.website.com/fr/');

了解php.net

的更多信息