Другой форматер для встраиваемой формы? - PullRequest
0 голосов
/ 01 декабря 2010

Я пытаюсь изменить форматер формы встраиваемой формы. Можно ли подойти к чему-то так?

class sfOuterForm extends sfForm {
  public function configure()
  {
    $innerForm = new sfForm();
    $this->embedForm('inner', $innerForm);
    $this->getWidgetSchema()->setFormFormatter('list');
    $this->getEmbeddedForm('inner')->getWidgetSchema()->setFormFormatterName('table');
  }
}

Я ожидаю следующего:

echo (new sfOuterForm())

выходы:

<li><label>Outer Label</label><input type="text" /></li>
<li>
  <table>
   <tr><td><label>Inner Label</label></td><td><input type="text" /></td></tr>
  </table>
</li>

Ответы [ 2 ]

1 голос
/ 01 декабря 2010

Я сам отвечу на мой вопрос :) Проблема возникла, когда я попытался изменить форматер для встроенных форм отношений. Я решил это следующим образом:

class sfOuterForm extends sfForm {
  public function configure()
  {
    $innerForm = new sfForm();
    $this->embedRelation('relationName');
    $this->getWidgetSchema()->setFormFormatter('list');
    $this->getEmbeddedForm('relationName')->getWidgetSchema()->setDefaultFormFormatterName('table');
  }
}

Надеюсь, это кому-нибудь поможет:)

1 голос
/ 01 декабря 2010

Как только форма внедрена, ее исходная схема виджета и схема валидатора ничего не делают - они были объединены в схемы верхнего уровня.Таким образом, вам нужно установить средство форматирования формы перед внедрением:

$this->getWidgetSchema()->setFormFormatter('list');
$innerForm = new sfForm();
$innerForm->getWidgetSchema()->setFormFormatterName('table');
$this->embedForm('inner', $innerForm);

Стоит заглянуть в sfForm :: embedForm, чтобы увидеть, что происходит внутри.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...