问题描述
我具有以下结构:
- 实体“模块”
- 实体“参数”
我的测试模块有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']
”访问此数据,因为它已在收集中,但是有解决方案吗?除了在提交的深层数组中嵌套循环之外?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)