Я разрабатываю приложение с 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 других языка. Спасибо за помощь
Да, ты можешь. Вы можете @request_stack
службу @request_stack
в свой слушатель, получить от нее запрос и прочитать локаль.
Существует, однако, расширение Doctrine, которое, вероятно, делает то, что вы хотите: Translatable
Спасибо @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]
надеюсь, это тоже поможет другим