2012-10-03 31 views
5

मैं 5 पाठ रूप हैzf2 सत्यापन फ़ॉर्म: मैं निर्भर फ़ील्ड को कैसे सत्यापित कर सकता हूं?

$number1 = new Text('number-1'); 
$number2 = new Text('number-2'); 
$number3 = new Text('number-3'); 
.... 
रिश्तेदार फिल्टर

foreach(...) 
    $input = new Input($elementName); 
    $validator = new ValidatorChain(); 
    $validator->addByName('Int') 
     ->addByName('Between', array(
      'min'=>0, 
      'max'=>$this->maxAllowedTicket, 
      'inclusive'=>true)); 
    $filter = new FilterChain(); 
    $filter->attachByName('Int'); 

    $input->setValidatorChain($validator); 
    $input->setFilterChain($filter); 

साथ

मुझे लगता है कि केवल एक ही इस 3 के रूपों एक मूल्य 0. से अलग हो सकते हैं हैं वहाँ तो दो संभावित त्रुटियाँ हैं।

बहुत सारे संख्या

$data['number1'] = 5; 
$data['number2'] = 5; 
$data['number3'] = 0; 
$data['number4'] = 5; 
$data['number5'] = 0; 

कोई संख्या

$data['number1'] = 0; 
$data['number2'] = 0; 
$data['number3'] = 0; 
$data['number4'] = 0; 
$data['number5'] = 0; 

मैं एक ही समय में यह एक से अधिक फ़ील्ड कैसे मान्य कर सकते हैं?

उत्तर

17

ऐसा करने के लिए आपको अपना खुद का Validator कक्षा लिखनी होगी। आपकी नई सत्यापन कक्षा के isValid() विधि को $context भी प्राप्त होता है जिसमें पूरे फॉर्म के मान शामिल होते हैं। इस तरह आप अन्य क्षेत्रों के आधार पर प्रत्येक फ़ील्ड के मान को मान्य कर सकते हैं।

namespace My\Validator; 
use Zend\Validator\AbstractValidator; 

class CustomValidator extends AbstractValidator 
{ 
    public function isValid($value, $context = null) 
    { 
     // put your logic here and call 
     // $this->error(); if required 
    } 
} 
+0

धन्यवाद! यह काम करता है, लेकिन मैं इस अनुवादक को ValidatorPluginManager में कैसे पंजीकृत कर सकता हूं? – chrvadala

+0

क्या अनुवादक? –

+1

डुनो, इसका उपयोग नहीं कर रहा है, लेकिन आप इनपुट विनिर्देश में वैधकर्ता के नाम के रूप में पूर्ण वर्गनाम (स्ट्रिंग) को पास कर सकते हैं –