У меня есть тип формы, который содержит несколько полей. Одно поле - это настраиваемый тип формы, который сам содержит несколько полей. Я не могу изменить дочерний тип, потому что он используется в другом месте.
Я только хочу показать поля, которые в настоящее время не пустые, но я не нашел способ сделать это. Я попытался спрятать их на шаблоне ветки - как в, а не в том, чтобы сделать их, если значение не пустое, - но затем они передаются как пустые, поэтому ранее установленные значения теперь не заданы.
Как я могу эффективно использовать часть типа формы?
Редактирование для уточнения:
Скажем, у меня есть класс OrderType
с поля orderNumber
и identifiers
. Идентификаторы являются ItentifiersType
и содержат поля invoiceNumber
, name
, purchaseDate
и serialNumber
.
Страница, которую я пытаюсь создать, должна показывать только отсутствующие данные. Если значения для orderNumber
и purchaseDate
уже присутствуют в базе данных, я хочу показать только поля ввода для номера invoiceNumber
и serialNumber
.
$builder->add('identifiers', 'collection', [
'type' => new IdentifierType(),
'allow_add' => true
])->add('orderNumber', 'int');
Вот как я решил свою проблему. Было довольно неудобно достигать полей внутри поля identifiers
но оно работает и обрабатывает форму обработки, как и ожидалось.
/* Removed non-empty fields from the form */
$builder->addEventListener(
FormEvents::POST_SET_DATA,
function (FormEvent $event) {
$form = $event->getForm();
$identifiers = $form->get('identifiers');
foreach ($identifiers->all()[0]->all() as $identifier) {
if ($identifier->getData() != null) {
$identifiers->all()[0]->remove($identifier->getName());
}
}
});