【问题标题】:Symfony2 REST Translation from database来自数据库的 Symfony2 REST 翻译
【发布时间】:2015-12-30 07:58:55
【问题描述】:

我面临着非常困难的问题来处理我的情况。我在数据库中保存标题,名称为标题,翻译列的名称为 bntitle。

现在我使用 FosRest 和 jms 序列化程序来提供 api 响应。但我找不到基于本地发送响应的方法。因为它总是调用

getTitle()

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

这个控制器:

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

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

    eturn $data;

}

我该怎么做?

【问题讨论】:

  • 这不是一个干净的处理翻译方式,现在你正面临它的后果。更改数据模型是否为时已晚?
  • 是的,我们的数据库中现在已经有数千条数据了..

标签: symfony translation fosrestbundle


【解决方案1】:

这肯定不是处理翻译的最佳方法,但如果您只需要标题属性,您可以将本地作为参数传递给实体,然后在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

【讨论】:

  • 谢谢它的工作,但你有更好的想法不使用教义行为或翻译?
  • public function getTitle() { return $this->locale === 'bn' ? $this->getBntitle() : $this->title;我用这个...
猜你喜欢
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多