2014-10-08 6 views
7

मैं निम्नलिखित buildForm विधि है:फ़ील्ड केवल तभी जरूरी है जब फॉर्म नया है?

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder       
     ->add('firstname','text',array('label'=>'First Name')) 
     ->add('lastname','text',array('label'=>'Last Name')) 
     ->add('dob','date',array('widget'=>'single_text','label'=>'DOB')) 
     ->add('username','text',array('label'=>'Username')) 
     ->add('password','password',array('label'=>'Password')) 
     ->add('filesPassword','password',array('label'=>'My Files Password','required'=>false)) 
     ->add('email','email',array('label'=>'Email')) 
     ->add('language','entity',array('class'=>'GWD\AdminBundle\Entity\Languages','label'=>'Language')) 
     ->add('theme','entity',array('class'=>'GWD\AdminBundle\Entity\Themes','label'=>'Theme')) 
     ->add('roles','entity',array('class'=>'GWD\AdminBundle\Entity\Role','label'=>'Role')) 
    ; 
} 

मैं गतिशील रूप से पासवर्ड फ़ील्ड सेट कर सकते हैं केवल एक नया रिकार्ड बनाने पर आवश्यक और किया जाना है यह गैर आवश्यक सेट जब एक रिकॉर्ड को अपडेट करने?

+0

http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html – Cheery

उत्तर

0

निम्न कोड केवल एक चेतावनी के साथ मेरे लिए काम करता, पासवर्ड फ़ील्ड में फार्म के अंत में जोड़ा जाता है और नहीं हो जाता है आदेश मैं चाहता था कि भले ही मैंने सोचा कि उस कार्यक्रम को जोड़कर जहां मैं मैदान में दिखना चाहता था, यह चाल करेगा लेकिन ऐसा नहीं हुआ।

<?php 

namespace GWD\AdminBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 
use Symfony\Component\Form\FormEvents; 
use Symfony\Component\Form\FormEvent; 

class AdministratorsType extends AbstractType 
{ 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder       
      ->add('firstname','text',array('label'=>'First Name')) 
      ->add('lastname','text',array('label'=>'Last Name')) 
      ->add('dob','date',array('widget'=>'single_text','label'=>'DOB')) 
      ->add('username','text',array('label'=>'Username')); 

     $builder->addEventListener(FormEvents::PRE_SET_DATA, 
      function(FormEvent $event) use ($builder) { 
       $administrator = $event->getData(); 
       if (!$administrator || null === $administrator->getId()) { 
        $event->getForm()->add('password','password',array('label'=>'Password','required'=>true)); 
       } else { 
        $event->getForm()->add('password','password',array('label'=>'Password','required'=>false)); 

       } 
      } 
     ); 

     $builder 
      ->add('filesPassword','password',array('label'=>'My Files Password','required'=>false)) 
      ->add('email','email',array('label'=>'Email')) 
      ->add('language','entity',array('class'=>'GWD\AdminBundle\Entity\Languages','label'=>'Language')) 
      ->add('theme','entity',array('class'=>'GWD\AdminBundle\Entity\Themes','label'=>'Theme')) 
      ->add('roles','entity',array('class'=>'GWD\AdminBundle\Entity\Role','label'=>'Role')) 
     ; 

    } 


    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'GWD\AdminBundle\Entity\Administrators' 
     )); 
    } 


    public function getName() 
    { 
     return 'gwd_adminbundle_administrators'; 
    } 
} 
+1

उदाहरण के लिए, आप इस बंडल का उपयोग आदेश को पुनर्व्यवस्थित करने के लिए कर सकते हैं https://github.com/egeloen/IvoryOrderedFormBundle – Cheery

+0

बढ़िया! यह बिल्कुल वैसा ही दिखता है जो मुझे चाहिए, मुझे आश्चर्य है कि यह एक विशेष सुविधा क्यों नहीं है ... – MikeGA

+0

सिवाय इसके कि यह क्षतिग्रस्त दिखता है - मुझे रिपॉजिटरी में सभी फाइलें नहीं दिखाई देती हैं। क्या आप फ़ॉर्म को कई स्थानों पर पुन: उपयोग करना चाहते हैं या यह केवल एक बार का फॉर्म है? और, बीटीडब्ल्यू, सोनाटा एडमिन एडमिन इंटरफेस के लिए एक अच्छा बंडल है। – Cheery

-2

आप अपने सरणी जहां लेबल निर्धारित करने के लिए एक और वर जोड़ सकते हैं:

->add('firstname','text',array('label'=>'First Name', 'required' => false)) 
+1

मुझे लगता है कि आप मेरे सवाल का गलत समझा, मैं जानता हूँ कि मैं यह कर सकते हैं जो भी आप सुझाते हैं वह करें लेकिन मैं इसे केवल तभी जरूरी बनाना चाहता हूं जब उसका नया डेटा डाला जा रहा हो और डेटा अपडेट होने पर इसे आवश्यक न हो। – MikeGA

8

आप नीचे दिए गए कोड की कोशिश कर सकते:

$builder 
    ->add('password','password', 
     array(
       'label' => 'Password', 
       'required' => is_null($builder->getData()->getId()) 
      ) 
     ) 
+0

यह जो मैं चाहता था उसे पूरा करने का सबसे आसान और सबसे छोटा तरीका था! बहुत बहुत धन्यवाद! – MikeGA

+0

यह समाधान मेरे लिए काम नहीं करता है क्योंकि '$ builder-> getData() 'ने कभी भी संबंधित इकाई डेटा वापस नहीं किया है। मुझे इस समाधान कोड के साथ मिश्रित [सिम्फनी 2 कुकबुक] में वर्णित [घटना श्रोता] का उपयोग करना था (http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html)। – dubrox

+0

यदि आप फ़ॉर्म में ऑब्जेक्ट नहीं जोड़ते हैं तो ऐसा हो सकता है। – kapa89

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