form.factoryサービスの「createNamedBuilder」または「createNamed」関数を使用している場合は、それを使用してデータを設定および保存する方法のスニペットを次に示します。'data'フィールドを使用することはできず(nullのままにする)、渡されたデータ/エンティティを$options
値として設定する必要があります。
setAllowedTypes()およびsetRequired()オプションの使用に関する@sarahg命令も組み込みました。これは正常に機能しているようですが、最初にsetDefined()でフィールドを定義する必要があります。
また、データを設定する必要がある場合は、フォーム内で「データ」フィールドに追加することを忘れないでください。
コントローラーでは、getNameが2.8 / 3.0で非推奨になったため、getBlockPrefixを使用しています。
コントローラ:
$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',
)
)
...
}