在 Symfony 2.8/3.0 中,这发生了一些变化,如果您有一个想要绑定其他实体的表单,那么请在此处查看我的答案:
在 Symfony 2.8/3.0 中将数据传递给 buildForm()
如果有人使用服务中的 a createNamedBuilder
orcreateNamed
函数,form.factory
这里是关于如何使用它设置和保存数据的片段。您不能使用该data
字段(保留该字段)并且您必须将传递的数据/实体设置为$options
值。
我还合并了有关使用和选项的@sarahg说明,它似乎工作正常,但您首先需要定义字段setAllowedTypes()
setRequired()
setDefined()
如果您需要设置数据,请记住将其添加到data
字段中。
在控制器中,我使用getBlockPrefix
的是2.8/3.0getName
中已弃用的
控制器
/*
* @var $builder Symfony\Component\Form\FormBuilderInterface
*/
$formTicket = $this->get('form.factory')->
createNamed(
$tasksPerformedForm->getBlockPrefix(),
TaskAddToTicket::class,
null,
array(
'ticket' => $ticket
)
);
形式
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefined('ticket');
$resolver->setRequired('ticket');
$resolver->addAllowedTypes('ticket', Ticket::class);
$resolver->setDefaults(array(
'translation_domain'=>'AcmeForm',
'validation_groups'=>array('validation_group_001'),
'tasks' => null,
'ticket' => null,
));
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$this->setTicket($options['ticket']);
//This is required to set data inside the form!
$options['data']['ticket']=$options['ticket'];
$builder
->add('ticket', HiddenType::class, array(
'data_class'=>'acme\TicketBundle\Entity\Ticket',
)
)
...
}