2016-01-12 7 views
10

मैं Symfony3 में एक रूप है, जो मैं प्रारंभ है - डॉक्स निम्नलिखित - अनुसरण के रूप में:Symfony3: निर्माण FormType

$form=$this->createForm(BookingType::class,$booking); 

$ बुकिंग पहले से मौजूद किसी इकाई है, जो मैं संशोधित करना चाहते हैं है - लेकिन मैं चाहता हूँ इकाई के आधार पर प्रपत्र को संशोधित - जैसे:

public function buildForm(FormBuilderInterface $builder,$options) { 
    $builder->add('name'); 
    if(!$this->booking->getLocation()) { 
     $builder->add('location'); 
    } 
} 

पहले Symfony 2.8 ऐसा FormType निर्माण करने के लिए संभव हो गया था:

$form=$this->createForm(new BookingType($booking),$booking); 

जो वही है जो मैं चाहता हूं :) लेकिन सिम्फनी 3 में यह विधि अपवाद फेंकता है। मैं अपने फॉर्म टाइप में एक इकाई कैसे पास कर सकता हूं?

+1

आप इस के लिए प्रपत्र की घटनाओं का उपयोग कर सकते हैं: http://symfony.com/doc/current/components/form/ form_events.html – xabbuh

+3

आपके फॉर्म में टाइप करें मुझे लगता है कि आप '$ entity = $ builder-> getData()' – pbenard

+0

@ Put12co22mer2 कर सकते हैं - यह ठीक काम करता है! – cklm

उत्तर

6

आप कस्टम विकल्पों के आधार पर एक फॉर्म प्रकार भी बदल सकते हैं।

प्रपत्र प्रकार में:

public function buildForm(FormBuilderInterface $builder, $options) { 
    $builder->add('name'); 

    if($options['localizable']) { 
     $builder->add('location'); 
    } 
} 

public function configureOptions(OptionsResolver $resolver) 
{ 
    $resolver->setDefaults(array(
     'localizable' => true, 
    )); 
} 

नियंत्रक में:

$form = $this->createForm(BookingType::class, $booking, array(
    'localizable' => !$booking->getLocation(), 
)); 
+0

मेरे लिए काम करता है, आपको बहुत धन्यवाद, मुझे याद नहीं आया कि डिफ़ॉल्ट विकल्प कैसे बदलें! –

संबंधित मुद्दे