如果有人使用 form.factory 服务中的“createNamedBuilder”或“createNamed”函数,这里是关于如何使用它设置和保存数据的 sn-p。您不能使用“数据”字段(保留为空),您必须将传递的数据/实体设置为 $options 值。
我还合并了有关使用 setAllowedTypes() 和 setRequired() 选项的 @sarahg 说明,它似乎工作正常,但您首先需要使用 setDefined() 定义字段
如果您需要设置数据,请记住将其添加到“数据”字段中。
在控制器中,我使用 getBlockPrefix,因为 getName 在 2.8/3.0 中已弃用
控制器:
/*
* @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',
)
)
...
}