Встроенная форма Symfony - можно НЕ показывать метку «родительской» встроенной формы? - PullRequest
1 голос
/ 21 июня 2011

Когда вы встраиваете форму в Symfony, метка для встроенной формы внедряется в родительскую форму.Например: если у меня есть PersonForm и добавлен этот код $this->embedForm('Address', $addressForm), у моего PersonForm теперь будет метка «Адрес», в дополнение к меткам для полей, составляющих AddressForm.Я хотел бы сохранить метки для отдельных полей, но избавиться от метки «Адрес», тем самым создавая впечатление, что две формы действительно едины.

Можно переопределить шаблон формы и вручную перебирать элементы формы и выводить их один за другим, но я часто сталкиваюсь с этой ситуацией, и я предпочел бы, чтобы Symfony обрабатывал это автоматически.

Ответы [ 3 ]

3 голосов
/ 21 июня 2011

Следующий код позволит вам присвоить метке другую пустую строку, но я подозреваю, что она все равно появится в любом случае.

$this->embedForm('Address', $addressForm)
$this->widgetSchema['Address']->setLabel('');

однако я подозреваю, что лучше всего использовать точку 6(embedMergeForm) на этой странице и используйте это http://itsmajax.com/2011/01/29/6-things-to-know-about-embedded-forms-in-symfony/

2 голосов
/ 21 июня 2011

Учитывая вашу ситуацию, итерации вручную над виджетами - единственный вариант. Другим вариантом является расширение sfWidgetFormSchemaFormatter, но это не позволит скрыть метку для встроенной формы, но при этом не скрыть ее для любого другого виджета.

Если вы часто сталкиваетесь с этой ситуацией, вы можете подумать о создании частичного только для рендеринга формы особым образом.

1 голос
/ 22 июня 2011

Вот простой способ отключить все метки. Добавьте этот метод к BaseForm, если вы делаете это часто.

public function disableLabels()
{
  $fields = $this->getWidgetSchema()->getFields();
  $this->getWidgetSchema()->setLabels(array_combine(array_keys($fields), array_fill(0, count($fields), false)));
}

Если вы хотите отключить только ярлыки во встроенной форме, отключите их перед внедрением:

$form = new FormToEmbed();
$form->disableLabels();
$parent->embedForm('child', $form);
...