मामले में किसी को भी 'createNamedBuilder' या 'createNamed' फ़ंक्शन का उपयोग कर रहा है form.factory सेवा यहाँ स्निपेट सेट करने और इसे उपयोग करने के डेटा को बचाने के लिए है। आप 'डेटा' फ़ील्ड का उपयोग नहीं कर सकते (उस शून्य को छोड़ दें) और आपको पारित डेटा / संस्थाओं को $optionsमूल्य के रूप में सेट करना होगा ।
मैंने setAllowedTypes () और setRequired () विकल्पों का उपयोग करने के बारे में @sarahg निर्देशों को शामिल किया और यह ठीक काम करने लगता है, लेकिन आपको पहले setDefined () के साथ फ़ील्ड को परिभाषित करने की आवश्यकता है
फॉर्म के अंदर भी अगर आपको डेटा सेट करने की आवश्यकता है तो इसे 'डेटा' फ़ील्ड में जोड़ने के लिए याद रखें।
नियंत्रक में मैं getBlockPrefix का उपयोग कर रहा हूं क्योंकि getName को 2.8 / 3.0 में पदावनत किया गया था
नियंत्रक:
$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',
)
)
...
}