Задать вопрос
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';
    }

}
  • Вопрос задан
  • 1491 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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