在Symfony中,如何显示和提交表单类型的一部分


In Symfony, how to show and submit part of a form type

我的表单类型包含多个字段。一个字段是自定义表单类型,它本身也包含多个字段。我无法更改子类型,因为它正在其他地方使用。

我只想显示当前不为空的字段,但我还没有找到这样做的方法。我尝试将它们隐藏在树枝模板上-如中所示,如果值不为空,则不呈现它们-但随后它们被提交为空,因此以前设置的值现在不设置。

如何有效地使用表单类型的一部分?

编辑以澄清:

假设我有一个具有字段orderNumberidentifiers的类OrderType。标识符是ItentifiersType,并且包含字段invoiceNumbernamepurchaseDateserialNumber

我试图创建的页面应该只显示丢失的数据。如果数据库中已经存在orderNumberpurchaseDate的值,我只想显示invoiceNumberserialNumber的输入字段。

$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());
                }
            }
    });