我的表单类型包含多个字段。一个字段是自定义表单类型,它本身也包含多个字段。我无法更改子类型,因为它正在其他地方使用。
我只想显示当前不为空的字段,但我还没有找到这样做的方法。我尝试将它们隐藏在树枝模板上-如中所示,如果值不为空,则不呈现它们-但随后它们被提交为空,因此以前设置的值现在不设置。
如何有效地使用表单类型的一部分?
编辑以澄清:
假设我有一个具有字段orderNumber
和identifiers
的类OrderType
。标识符是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());
}
}
});