2012-06-27 16 views
12

में मान नहीं मिला था मेरे पास 2 चयन के साथ एक फॉर्म है। पहले चयन के मूल्य के आधार पर, यह AJAX का उपयोग करके दूसरे चयन के मान अपडेट करता है। ऐसा करने से फ़ॉर्म मान्य नहीं होता है।ज़ेंड: फ़ॉर्म सत्यापन: वैस्टैक त्रुटि

 $form=$this->getAddTaskForm(); //the form 

     if(!$form->isValid($_POST)) { 
      $values=$form->getValues(); 

      //get the options and put them in $options 

       $assignMilestone=$form->getElement('assignedMilestone'); 
       $assignMilestone->addMultiOptions($options); 

     } 

     if($form->isValid($_POST)) { 
       //save in the database 
      }else { 
       //redisplay the form 
      } 

असल में, मैं जाँच अगर यह वैध है और यह अगर उपयोगकर्ता पहले चयन के मूल्य बदल नहीं है: तो, मैं अगले परिवर्तन किया है। मुझे विकल्प मिलते हैं जो दूसरे चयन को पॉप्युलेट करते हैं और उनके साथ फॉर्म को पॉप्युलेट करते हैं। फिर मैं इसे फिर से सत्यापित करने की कोशिश करता हूं। हालांकि यह काम नहीं करता है। कोई भी समझा सकता है क्यों? वही "वैस्टैक में मूल्य नहीं मिला" मौजूद है।

+0

'var_dump ($ विकल्प); 'और फिर' var_dump ($ असाइनमिलस्टोन-> getValue());' और देखें कि आपको क्या परिणाम मिलते हैं। यह होना चाहिए कि '$ Options' के लिए सरणी कुंजियों में सेट किया गया सही मान नहीं है। – drew010

उत्तर

31

आप सत्यापनकर्ता को निष्क्रिय करने की कोशिश कर सकते हैं: अपने Form.php

$field = $this->createElement('select', 'fieldname'); 
$field->setLabel('Second SELECT'); 
$field->setRegisterInArrayValidator(false); 
$this->addElement($field); 

में

तीसरी लाइन सत्यापनकर्ता निष्क्रिय हो जाएगा और यह काम करना चाहिए।

+1

यह बेहद सहायक था, बहुत बहुत धन्यवाद। – SoluableNonagon

+0

मुझे नहीं लगता कि सत्यापन को हटाने के लिए सुरक्षित है, लेकिन यदि आप इसे हटाने का निर्णय लेते हैं तो आपको कम से कम वैधकर्ताओं को बदलना चाहिए। उदाहरण के लिए यदि आप अब जांच नहीं करते हैं कि तत्व चयन सरणी में है या नहीं, तो आपको यह सुनिश्चित करना होगा कि चयनित विकल्प (कम से कम) आपके मामले के लिए मान्य है ... एक "दिनांक" या "संख्या" या "ईमेल" या जो भी हो । –

+0

jquery के साथ गतिशील रूप से चुनिंदा तत्व को आरोहित करते समय यह विकल्प बहुत उपयोगी होता है। – vandersondf

1

आप फॉर्म सत्यापन की जांच करने से पहले तत्व चुनने के विकल्प भी जोड़ सकते हैं। इस तरह आप बीमाकृत हैं कि चयन मूल्य सीमा में है।

उदाहरण के लिए::

8

तुम भी 'disable_inarray_validator' => true का उपयोग कर InArray सत्यापनकर्ता निष्क्रिय कर सकते हैं

$this->add(array(
     'name'  => 'progressStatus', 
     'type'  => 'DoctrineModule\Form\Element\ObjectSelect', 
     'options' => array(
      'disable_inarray_validator' => true, 
     ), 

    )); 
+0

यह एकमात्र समाधान है जो मेरे लिए काम करता है – Ruwantha

3

Additionaly आप जोड़ना चाहिए आप InArray सत्यापनकर्ता खुद के लिए अपने डाटाबेस आदि

में की रक्षा के लिए

Zend फ्रेमवर्क 1 में यह इस तरह दिखता है:

$this->addElement('select', $name, array(
      'required' => true, 
      'label' => 'Choose sth:', 
      'filters' => array('StringTrim', 'StripTags'), 
      'multiOptions' => $nestedArrayOptions, 
      'validators' => array(
       array(
        'InArray', true, array(
         'haystack' => $flatArrayOptionsKeys, 
         'messages' => array(
          Zend_Validate_InArray::NOT_IN_ARRAY => "Value not found" 
         ) 
        ) 
       ) 
      ) 
     )); 

जहां $ nestedArrayOptions आप मल्टीऑप्शन और $ flatArrayOptionsKeys में आपको सभी चाबियाँ हैं।

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