Как визуализировать только определенного внука во встроенных формах? - PullRequest
0 голосов
/ 04 июля 2019

Мой вопрос похож на Наследование форм Symfony: не существует ни свойства, ни одного из методов , но шаблоны не включены.

У меня есть вложенная форма

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 Ответ

1 голос
/ 04 июля 2019

Да, вы можете сделать это.Предполагая, что form в вашем примере ветки является экземпляром DemandType, вы должны сделать:

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

Однако это может не сработать, поскольку children также является встроенным свойством в некоторой форме Symfony.типы.В HomeType я бы переименовал поле children во что-то еще, например childrenCollection, и в этом случае вы бы сделали это в виде ветки:

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