Всем день добрый. Столкнулся с проблемой, что-то разрулить не могу.
Есть форма, 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';
}
}