如果有人在使用来自form.factory服务的'createNamedBuilder'或'createNamed'函数,则以下是如何使用它设置和保存数据的代码段。您不能使用“数据”字段(保留为空),而必须将传递的数据/实体设置为$options
值。
我还合并了有关使用setAllowedTypes()和setRequired()选项的@sarahg指令,它似乎可以正常工作,但您首先需要使用setDefined()定义字段
同样在表单内部,如果您需要设置数据,请记住将其添加到“数据”字段中。
在Controller中,我使用getBlockPrefix,因为2.8 / 3.0中已弃用getName
控制器:
$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']);
$options['data']['ticket']=$options['ticket'];
$builder
->add('ticket', HiddenType::class, array(
'data_class'=>'acme\TicketBundle\Entity\Ticket',
)
)
...
}