WarGot
@WarGot

Как в symfony использовать DTO для CollectionType?

Всем день добрый. Столкнулся с проблемой, что-то разрулить не могу.
Есть форма, FirstFormType, на форме есть поле CollectionType ссылающееся на вторую форму. Для второй формы надо заполнить значения через DataTransformer. Ниже привожу упрощённый код двух форм. Упростил до использования CallbackTransformer`a вместо полноценного трансформера. Проблема в том что поля субформы из CollectionType не заполняются -(

Первая форма
<?php

namespace True\AdminBundle\Form\Type;

/* uses */

class FirstFormType extends AbstractType
{
    public function buildForm (FormBuilderInterface $builder, array $options)
    {
        $builder->add('qwe', CollectionType::class, [
            'label' => 'asdasd',
            'required' => false,
            'prototype' => true,
            'allow_add' => true,
            'allow_delete' => true,
            'mapped' => false,
            'entry_type' => SecondCollectionFormType::class,
            'entry_options'  => array(
                /*'fields' => $fields,
                'descriptions' => $options['descriptions'][$key],*/
            ),
        ]);
        $builder->get('qwe')
            ->addModelTransformer(new CallbackTransformer(
                function ($tagsAsArray) {
                    // Проблемное место
                    $result['qwe'][] = ['logo' => '222', 'description' => '123'];
                    return $result;
                },
                function ($tagsAsString) {
                    $result['qwe'][] = ['logo' => '222', 'description' => '123'];
                    return $result;
                }
            ))
        ;
        $builder
            ->add('submit', SubmitType::class, [
                'label' => 'Сохранить',
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'fields' => null,
            'descriptions' => null,
            'em' => null,
            'template' =>  null,
            'sectionName' => null,
            'doctrine' => null,
            'websiteId' => null,
        ));
    }

    public function getBlockPrefix()
    {
        return 'backend_form';
    }
}


Форма которая вставляется в CollectionType
<?php
namespace True\AdminBundle\Form\Type;
/* uses */

class SecondCollectionFormType extends AbstractType
{
    public function buildForm (FormBuilderInterface $builder, array $options)
    {
        $builder->add('logo', TextType::class, [
            'label' => $label,
            'required' => false,
            'mapped' => false,
            ]);
        $builder->add('description', TextareaType::class, [
            'label' => $label,
            'required' => false,
            'mapped' => false,
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'fields' => null,
            'descriptions' => null,
        ));
    }

    public function getBlockPrefix()
    {
        return 'backend_collection_form';
    }

}
  • Вопрос задан
  • 1485 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы