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

时间:2019-07-03 21:11:40

标签: symfony symfony4 symfony-forms

我的问题类似于Symfony form inheritance : Neither the property nor one of the methods exist,但不包含模板。

我有一个嵌套表单

demand
    home
       n children

DemandType

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

HomeType

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,
        ]);
    }
}

ChildrenType

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) }}
  

属性“ children”或方法“ children()”,“ getchildren()” /“ ischildren()” /“ haschildren()”或“ __call()”都不存在,并且在类中没有公共访问权限“ Symfony \ Component \ Form \ FormView”。

似乎我必须呈现原始输入。

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

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

1 个答案:

答案 0 :(得分:1)

是的,您可以这样做。假设您的树枝示例中的formDemandType的实例,那么您可以这样做:

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

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

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