按照此答案中的建议,我的应用程序当前使用构造函数将数据传递到表单类型。但是,Symfony2.8升级指南建议不要将类型实例传递给createForm函数:
createForm
将类型实例传递给Form :: add(),FormBuilder :: add()和FormFactory :: create *()方法已过时,在Symfony 3.0中不再受支持。而是传递类型的标准类名。 Before: $form = $this->createForm(new MyType()); After: $form = $this->createForm(MyType::class);
将类型实例传递给Form :: add(),FormBuilder :: add()和FormFactory :: create *()方法已过时,在Symfony 3.0中不再受支持。而是传递类型的标准类名。
Before: $form = $this->createForm(new MyType()); After: $form = $this->createForm(MyType::class);
看来我无法使用完全合格的类名传递数据,还有其他选择吗?
这也破坏了我们的某些形式。我通过将自定义数据通过选项解析器传递来修复了该问题。
在您的表单中输入:
public function buildForm(FormBuilderInterface $builder, array $options) { $this->traitChoices = $options['trait_choices']; $builder ->add('name', TextType::class, ['label' => 'L_PROFILE_EDIT_NAME', 'required' => false]) ... ->add('figure_type', ChoiceType::class, [ 'label' => 'L_PROFILE_EDIT_FIGURETYPE', 'mapped' => false, 'choices' => $this->traitChoices['figure_type'] ]) ... ; } /** * {@inheritdoc} */ public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'Foo\BarBundle\Entity\Profile', 'trait_choices' => null, )); }
然后,当您在控制器中创建表单时,将其作为选项而不是在构造函数中传递:
$form = $this->createForm(ProfileEditType::class, $profile, array( 'action' => $this->generateUrl('profile_update'), 'method' => 'PUT', 'trait_choices' => $traitChoices, ));