В случае, если кто использует функции «createNamedBuilder» или «createNamed» из сервиса form.factory - это фрагмент, посвященный тому, как установить и сохранить данные, используя это. Вы не можете использовать поле data (оставить это значение null), и вам необходимо установить переданные данные/сущности как значение $options
.
Я также включил @sarahg инструкции об использовании setAllowedTypes() и опции setRequired(), и это, кажется, работает хорошо, но в первую очередь необходимо определить поле с 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',
)
)
...
}
Какие данные необходимо передать? Это что-то, что можно вводить? – Cerad
Надеемся, что UPGRADE.md улучшится: https://github.com/symfony/symfony/issues/18662 – althaus