Symfony的。教义i18n继承。发电机问题

时间:2011-04-21 13:19:43

标签: symfony1 doctrine symfony-1.4

来自我的schema.yml的示例:

Service:
  actAs:
    I18n:
      fields: [title]
    tableName: services
    columns:
      id: { type: integer(3), primary: true, autoincrement: true }
      title: { type: string(255) }

DailyHoroscope:
   actAs:
     Timestampable: ~
     I18n:
       fields: [ description ]
   tableName: daily_horoscopes
   inheritance:
     type: concrete
     extends: Service
   columns:
     description: { type: text }
     date: { type: date }
     starsign_id: { type: integer(1), notnull: true }
   relations:
     Starsign:
       type: one
       class: Starsign
       local: starsign_id
       foreign: id

在结果中,只有标题是国际化的。同样在数据库中,只有标题是国际化的。

我试图谷歌这个问题,但没有任何结果。

在数据库中,在表daily_horoscopes_translations中我只有翻译标题。 在表单中,只有标题字段是国际化的,但描述只有一个。

在BaseDailyHoroscopeTranslationFormFilter.class.php中:

public function getFields()
{
  return array(
  'id'    => 'Number',
  'title' => 'Text',
  'lang'  => 'Text',
  );
}

但如果你添加'description' - 它将无效,因为数据库是以错误的方式生成的。

1 个答案:

答案 0 :(得分:2)

描述子表中的i18n字段,而不是父表:

    Service:
#      actAs:
#        I18n:
#          fields: [title]
        tableName: services
        columns:
          id: { type: integer(3), primary: true, autoincrement: true }
          title: { type: string(255) }

    DailyHoroscope:
       actAs:
         Timestampable: ~
         I18n:
           fields: [ description, title ]
       tableName: daily_horoscopes
       inheritance:
         type: concrete
         extends: Service
       columns:
         description: { type: text }
         date: { type: date }
         starsign_id: { type: integer(1), notnull: true }
       relations:
         Starsign:
           type: one
           class: Starsign
           local: starsign_id
           foreign: id

然后在表单中取消设置继承的字段(在我们的例子中是'title')字段,最后嵌入i18n表单对象:

unset($this['title']);
$this->embedI18n(array('en','fr','ru'));