Symfony2 getLocal () в событии жизненного цикла после загрузки

1

Я разрабатываю приложение с symfony2. Im сталкивается с проблемой с локализацией. Я хочу установить событие postLoad в жизненном цикле доктрины, но могу найти способ сделать это. Я использую метод маршрутизации для установки моего локального, например:

http://example.com/en/content

вот мой слушатель:

namespace MyApiBundle\Listener;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

use Doctrine\ORM\Event\LifecycleEventArgs;



class LocaleListener
{
private $local;

public function __construct($local) {

    $this->local = $local;
}


public function postLoad(LifecycleEventArgs $args)
{


    $local= 'en'; // I need to get the local from here

    $entity = $args->getEntity();
    if(method_exists($entity, 'setLocale')) {
        $entity->setLocale($local);
    }
}

}

Есть ли быстрый способ получить локальный отсюда? Не используйте новый Request(), поскольку он всегда возвращает en меня также есть 3 других языка. Спасибо за помощь

Теги:
doctrine2

2 ответа

2

Да, ты можешь. Вы можете @request_stack службу @request_stack в свой слушатель, получить от нее запрос и прочитать локаль.

Существует, однако, расширение Doctrine, которое, вероятно, делает то, что вы хотите: Translatable

  • 0
    Спасибо, я отправил свой ответ в соответствии с вашим предложением ..
1

Спасибо @Igor Pantovic

здесь я получил его работу, вот мой локальный список:

#/src/MyApiBUndle/Listner/LocalListner.php

namespace MyApiBundle\Listener;

use Symfony\Component\HttpFoundation\RequestStack;
use Doctrine\ORM\Event\LifecycleEventArgs;



class LocaleListener {


   private $requestStack;

/**
 * @param RequestStack $requestStackk
 */
public function __construct(RequestStack $requestStackk) {


    $this->requestStack = $requestStackk;
}


/**
 * @param LifecycleEventArgs $args
 */
public function postLoad(LifecycleEventArgs $args)
{

    $local= $this->requestStack->getCurrentRequest()->getLocale();

    $entity = $args->getEntity();
    if(method_exists($entity, 'setLocale')) {
        $entity->setLocale($local);
    }
}

}

и мой сервис

services:
my_api.listener.locale_listener:
        class:  MyApiBundle\Listener\LocaleListener
        tags:
            - { name: doctrine.event_listener, event: postLoad }

        arguments: [@request_stack]

надеюсь, это тоже поможет другим

Ещё вопросы

Сообщество Overcoder
Наверх
Меню