2015-01-21 6 views
1

У меня есть один пользовательский LocaleListner, кто упорствует Choosed локаль на базе:Symfony2 локаль не сохраняются по запросу AJAX

class LocaleListener implements EventSubscriberInterface 
{ 
    private $defaultLocale; 

    private $securityContext; 

    private $em; 

    public function __construct($defaultLocale, SecurityContext $securityContext, EntityManager $em) 
    { 
     $this->defaultLocale = $defaultLocale; 
     $this->securityContext = $securityContext; 
     $this->em = $em; 
    } 

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

    public function onKernelRequest(GetResponseEvent $event) 
    { 
     if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) { 
      return; 
     } 

     $request = $event->getRequest(); 
     // Impersonate account check 
     if (!$request->hasPreviousSession()) { 
      return; 
     } 

     $user = null; 
     if ($this->securityContext->getToken()) { 
      $user = $this->securityContext->getToken()->getUser(); 
     } 

     if ($locale = $request->get('_locale')) { 
      $request->getSession()->set('_locale', $locale); 
      if (null !== $user && $user != 'anon.' && $user->getLocale() !== $locale) { 
       $user->setLocale($locale); 
       $this->em->persist($user); 
       $this->em->flush(); 
      } 
     } else if ($user instanceof User && null !== $user->getLocale()) { 
      $request->getSession()->set('_locale', $user->getLocale()); 
     } 

     $request->setLocale($request->getSession()->get('_locale', $this->defaultLocale)); 
    } 
} 

Это прекрасно работает, но локаль полностью игнорируется, если я позвоню контроллер с запросом AJAX.

Действительно, стандартная локализация - fr. И если я выберу en locale и сделаю запрос ajax, возвращенный шаблон будет переведен на французский, а не на английский.

Как это возможно?

Спасибо.

EDIT.

Вот мой Javascript Ajax вызова (кофе):

refreshUrl = Routing.generate('ticket_index') + location.search 
setInterval => 
    $.get refreshUrl, { _ajax: 1 }, (data) => 
    @tbody.html data 
    momentFromNow() 
, 10000 

Я уже пытаюсь добавить _locale параметр на Ajax запроса, не работает.

ответ

1

Наконец-то выяснилось, почему это не работает.

Выбранный приоритет вызывает эту проблему, изменен -50 на 17 решить все.

Но я не понимаю, почему приоритет влияние переводов на AJAX запросах ...

Если кто-то есть объяснение, я слышу! ;)

С благодарностью Alexandru Olaru за помощью.

0

Будет очень приятно опубликовать запрос ajax. Я предполагаю, что проблема может исходить из данных, которые вы отправляете в пределах ajax.

$.ajax({ 
    url: path_to_your_controller, 
    data: {'_locale': 'en'} //you probably are missing this part 
}) 
+0

Обновлено мое сообщение. Я уже пытаюсь добавить параметр _locale в запрос ajax, не работает. – Soullivaneuh

+2

Что я заметил в вашем коде есть строка: KernelEvents :: REQUEST => массив ( массив ('onKernelRequest', -50) ), Обычно в документации и на Symfony 2 книги они используют 18 вместо -50 , Я думаю, вы должны поэкспериментировать с этим номером. –

+0

Не является ли значение локального слушателя по умолчанию? – Soullivaneuh

Смежные вопросы