2012-10-03 82 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,不使用它,但是你可以在输入规范中传递完整的类名(字符串)作为验证器的名字 –