Перевод Symfony2 REST из базы данных

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

теперь я использую FosRest с сериализатором jms для предоставления ответа API. но я не могу найти способ отправить ответ на основе локального. потому что он всегда вызывает

getTitle()

способ получить заголовок, мой вопрос: если локальный en, то ключ заголовка будет getTitle(), если локальный bn, заголовок должен вызывать getBnTitle();

это контроллер:

public function getAction(Content $entity, Request $request)
{
   $locale =  $request->getLocale();
   $data = array();

   $data['_embedded']['content'] = $entity;

    eturn $data;

}

Как мне это сделать?


person Ahmad Sajid    schedule 30.12.2015    source источник
comment
Это не чистый способ обработки перевода, и теперь вы сталкиваетесь с его последствиями. Не поздно ли изменить вашу модель данных?   -  person goto    schedule 30.12.2015
comment
да, у нас уже есть более нескольких тысяч данных в нашей базе данных.   -  person Ahmad Sajid    schedule 31.12.2015


Ответы (1)


Это не лучший способ справиться с переводом, но если вам просто нужно это для атрибута title, вы можете передать локальный объект в качестве аргумента, а затем в методе getTitle() вы выполняете тест.

public class YourEntity{
    private $locale ;
    //......

    public function setLocale($locale){
       $this->locale = $locale
    }
    public function getTitle(){ 
      // your test here 
      if ( $locale === 'bn' ) return $this->getBnTitle();
      return $title ; 
    }

Затем в вашем контроллере:

public function getAction(Content $entity, Request $request)
{
   $locale =  $request->getLocale();
   // pass local to entity 
   $entity->setLocale($locale);
   $data = array();

   $data['_embedded']['content'] = $entity;

    eturn $data;

}

Редактировать: Если вам нужно лучшее решение, есть много расширений доктрины, которые выполняют перевод, одно из них https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/translatable.md

person zizoujab    schedule 30.12.2015
comment
Спасибо, это сработало, но есть ли у вас идея получше без использования поведения или перевода доктрины? - person Ahmad Sajid; 31.12.2015
comment
public function getTitle() { return $this-›locale === 'bn' ? $this-›getBntitle() : $this-›title; } Я использовал это... - person Ahmad Sajid; 04.01.2016