Symfony. Учение о наследстве. Проблема с генератором - PullRequest
1 голос
/ 21 апреля 2011

Пример из моего 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',
  );
}

, но если вы добавите «описание» - это не сработает, потому что база данных сгенерирована неправильно.

1 Ответ

2 голосов
/ 21 апреля 2011

Опишите поля 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'));
...