无法检索“收集类型”中的额外未映射字段

时间:2020-08-29 13:01:11

标签: symfony symfony4

我具有以下结构:

  • 实体“模块”
  • 实体“参数”

一个模块可以有很多参数。

我的测试模块有3个参数的集合。

每个参数都没有相同的功能,它可能是文本,整数,选择,因此,我制作了一个FormType来格式化参数。见下文

我的ModuleType(嵌入ParametreModuleTestType的集合)

class ModuleType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('parametres', CollectionType::class, [
            'label' => false,
            'entry_type' => ParametreModuleTestType::class,
            'entry_options' => ['label' => false],
        ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Module::class
        ]);
    }
}

我的ParametreModuleTestType:

class ParametreModuleTestType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
            $parametre = $event->getData();
            $form = $event->getForm();
            switch ($parametre->getPropriete()) {
                case "tempMax":
                    $form
                        ->add('valeur', IntegerType::class, [
                            'label' => false
                        ]);
                    break;
                case "dateRange":
                    $form
                        ->add('valeur', TextType::class, [
                            'label' => false
                        ]);
                    $form
                        ->add('valeurformatted', HiddenType::class, [  //Extra field here, only in specific item parameter
                            'label' => false,
                            'mapped' => false
                        ]);
                    break;
            }
        });
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Parametre::class,
            'allow_extra_fields' => true,
        ]);
    }
}

在我的控制器中,提交表单后:

    $form = $this->createForm(ModuleType::class, $module);
    $form->handleRequest($request);
    dd($form['valeurformatted']); 

我遇到以下错误:

“ valeurformatted”子项不存在。

当然,我的视图包含此隐藏的额外字段。

我想我无法使用经典语法“ $form['fieldname']”访问此数据,因为它已在收集中,但是有解决方案吗?除了在提交的深层数组中嵌套循环之外?

0 个答案:

没有答案