Доктрина Symfony: пользовательская тема generate-module: не удается найти шаблоны для встроенного поля i18n

Я создал пользовательскую тему, скопировав

plugins/sfDoctrinePlugin/data/generator/sfDoctrineModule/default"

в

plugins/sfDoctrinePlugin/data/generator/sfDoctrineModule/mytheme1"

Я изменил шаблоны, чтобы они соответствовали моим потребностям (отсутствие таблиц, отображение пользовательских ошибок и т. д.).

./symfony doctrine:generate-module --theme=mytheme1 frontend user User 

работает так, как я ожидал, однако, если я добавлю

$this->embedI18n(array('en','fr')); 

классу form генератор отображает встроенную форму I18n с помощью и .

Откуда это? Как я могу настроить его? где находятся файлы шаблонов для встроенных форм i18n?

Большое спасибо, Массимо


person Massimo    schedule 05.09.2010    source источник


Ответы (2)


Во-первых, не лучшая идея перегружать тему в самом плагине. Плагины не следует трогать, чтобы разрешить будущие обновления. Вы можете легко перегрузить тему в своем приложении.

Во-вторых, в вашем сообщении, похоже, чего-то не хватает: «в класс формы генератор отображает встроенную форму I18n с помощью и».

Может быть, показаны отсутствующие индикаторы перевода?

person Jakub Zalas    schedule 07.09.2010
comment
да чего-то не хватает! он использует ячейки и строки таблицы, даже если я удалил их из своего пользовательского шаблона. не могу понять откуда они - person Massimo; 08.09.2010
comment
После того, как я исправлю все эти вещи, я перенесу свою тему в свой проект. Однако спасибо за ваши советы! - person Massimo; 08.09.2010
comment
Это буква Т между [и]? Если это так, то это просто отсутствующий индикатор перевода (настроенный и включенный в factory.yml). - person Jakub Zalas; 08.09.2010
comment
Нет, это проблема макета шаблона. Форма отображается правильно, я имею в виду, что я могу видеть все поля. Когда вы указываете $this-›embedI18n(array('it','fr'); создается блок кода для каждого языка. Проблема в том, что этот блок кода исходит из неизвестного шаблона. Мне нужно найти и настроить этот шаблон, вы можете помочь мне найти его? - person Massimo; 10.09.2010
comment
Второй параметр метода embedI18n() — это декоратор html. Вы можете использовать его, чтобы изменить html для встроенной формы. - person Jakub Zalas; 10.09.2010

Шаблон определяется в средстве форматирования widgetSchema вашей формы i18n. По умолчанию установлено значение sfWidgetFormSchemaFormatterTable, которое содержит определение того, что вы ищете:

class sfWidgetFormSchemaFormatterTable extends sfWidgetFormSchemaFormatter
{
  protected
    $rowFormat       = "<tr>\n  <th>%label%</th>\n  <td>%error%%field%%help%%hidden_fields%</td>\n</tr>\n",
    $errorRowFormat  = "<tr><td colspan=\"2\">\n%errors%</td></tr>\n",
    $helpFormat      = '<br />%help%',
    $decoratorFormat = "<table>\n  %content%</table>";
}

Вы можете изменить это, отредактировав инициализацию класса формы i18n. Например, если вы хотите отобразить поля в списке:

public function setup()
{
    parent::setup();

    $formatter = new sfWidgetFormSchemaFormatterList($this->getWidgetSchema());

    $this->getWidgetSchema()->addFormFormatter('list', $formatter);
    $this->getWidgetSchema()->setFormFormatterName('list');
}

Вы также можете определить свой собственный модуль форматирования, унаследованный от sfWidgetFormSchemaFormatter, чтобы он соответствовал вашим предпочтениям макета.

person Julien Mellerin    schedule 28.11.2010