2012-10-03 107 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; 

NO NUMBER

$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

dunno,不使用它,但是你可以在輸入規範中傳遞完整的類名(字符串)作爲驗證器的名字 –