2012-10-03 27 views
5

私は一つだけ、この3つの形の2つの可能性のあるエラーは、次にあります0 異なる値を含むことができることだろう5テキスト形式の相対フィルタzf2検証フォーム:依存フィールドの検証方法を教えてください。

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); 

$number1 = new Text('number-1'); 
$number2 = new Text('number-2'); 
$number3 = new Text('number-3'); 
.... 

を持っています。

あまりにも多くNUMBERS

$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、これは使用しませんが、完全なclassname(string)を入力仕様のバリデーターの名前として渡すことができます –

関連する問題