我具有以下结构:
一个模块可以有很多参数。
我的测试模块有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']
”访问此数据,因为它已在收集中,但是有解决方案吗?除了在提交的深层数组中嵌套循环之外?