如何以嵌入式形式只呈现特定的孙子?

How to render only a specific grandchild in embedded forms?

我的问题与类似,但没有包含模板。

我有一个嵌套表单

demand
    home
       n children

需求类型

class DemandTypeExtension extends AbstractTypeExtension {
    public function buildForm(...): void
    {
        $builder
            ->add('home', HomeType::class, [
            ]);

家庭类型

class HomeType extends AbstractType {
    public function buildForm(): void {
        $builder
            ->add('children', CollectionType::class, [
                'entry_type' => ChildrenType::class,
                'allow_add' => true,
                'by_reference' => false,
                'allow_delete' => true,
                'prototype' => true,
                'label' => false,
            ]);
    }

    public function configureOptions(OptionsResolver $resolver): void {
        $resolver->setDefaults([
            'data_class' => Home::class,
        ]);
    }
}

儿童类型

class ChildrenType extends AbstractType {
    public function buildForm(...): void
    {
        $builder
            ->add('name', TextType::class, [
        ]);
    }

    public function configureOptions(OptionsResolver $resolver): void {
        $resolver->setDefaults([
            'data_class' => Children::class,
        ]);
    }

我的表格

{{ form_widget(form.children) }}

Neither the property "children" nor one of the methods "children()", "getchildren()"/"ischildren()"/"haschildren()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".

看来我必须渲染主页输入。

有没有可能只渲染子输入?也许有一些特殊的上下文(伪代码)?

{% block form_context(form.home) %}
     {{ form_widget(form.children) }}
{% endblock form_context %}

是的,你可以做到。假设你的树枝示例中的 formDemandType 的一个实例,那么你会做:

{{ form_widget(form.home.children) }}

但是,这可能不起作用,因为 children 也是某些 Symfony 表单类型的内置 属性。在 HomeType 中,我会将字段 children 重命名为其他名称,例如 childrenCollection,在这种情况下,您可以在树枝视图中执行此操作:

{{ form_widget(form.home.childrenCollection) }}