Symfony2数据库中的REST转换

Symfony2数据库中的REST转换,symfony,translation,fosrestbundle,Symfony,Translation,Fosrestbundle,我面临着非常困难的问题来处理我的处境。Im将标题保存在数据库中,对于en,名称为title,对于翻译列,名称为bntitle 现在,im使用FosRest和jms序列化程序来提供api响应。但是我找不到一种基于本地的回复方式。因为它总是叫 getTitle() 方法获取标题,我的问题是,如果local是en,那么标题键将是getTitle()如果local是bn,则title应该调用getbntTitle() 该控制器: public function getAction(Content $e

我面临着非常困难的问题来处理我的处境。Im将标题保存在数据库中,对于en,名称为title,对于翻译列,名称为bntitle

现在,im使用FosRest和jms序列化程序来提供api响应。但是我找不到一种基于本地的回复方式。因为它总是叫

getTitle()
方法获取标题,我的问题是,如果local是en,那么标题键将是
getTitle()
如果local是bn,则title应该调用
getbntTitle()

该控制器:

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

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

    eturn $data;

}

如何才能做到这一点?

这肯定不是处理翻译的最佳方法,但如果您只需要对title属性使用它,则可以将local作为参数传递给实体,然后在
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;

}
编辑: 如果你想要一个更好的解决方案,有许多理论扩展可以进行翻译,其中之一就是

这不是一种处理翻译的干净方法,现在你要面对它的后果。更改您的数据模型是否已经太晚了?是的,我们的数据库中现在已经有数千个数据了..thnx它工作了,但是您是否有更好的主意而不使用原则行为或转换?公共函数getTitle(){return$this->locale=='bn'?$this->getBntitle():$this->title;}我使用了这个。。。