Вложение вложенных полей типа формы в пустую форму Symfony - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть тип формы для объекта Shop.Это связано с отношением 1-1 к сущности ShopAddress.

Когда я вкладываю сущность ShopAddress, она отображается пустой при создании нового магазина.Как я могу получить это для рендеринга с соответствующими пустыми полями при создании нового Shop?

// App/Froms/ShopType.php
class ShopType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add( "name" ) // rendering fine
            ->add( "shopAddress", CollectionType::class, [
                "entry_type" => ShopAddressType::class, // no visible fields
            ] )
        ;
    }


    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            "data_class" => Shop::class,
        ));
    }
}

// App/Froms/ShopAddressType.php
class ShopAddressType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add("addressLine1", TextType::class ) // not rendering
            ->add("addressLine2") // not rendering
            ->add("postcode") // not rendering
            ->add("county"); // not rendering
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            "data_class" => ShopAddress::class,
        ));
    }
}

1 Ответ

0 голосов
/ 13 декабря 2018

Да.Решил это. Документы имели ответ Вам необходимо добавить его как новый FormBuilderInterface объект в методе add():

class ShopType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add("name", TextType::class)
            ->add(
                // nested form here
                $builder->create(
                    'shopAddress', 
                    ShopAddressType::class, 
                    array('by_reference' => true ) // adds ORM capabilities
                )
            )
        ;
    }


    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            "data_class" => Shop::class,
        ));
    }
}

Добавление array('by_reference' => true ) позволит вам использовать полный ORM(Доктрина в моем случае) возможности (например $shop->getAddress()->setAddressLine1('this string to add')).

...