5

私は5つのテキストフォームを持っています

$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つのフォームのうち1つだけに、0とは異なる値を含めることができます。その場合、2つのエラーが発生する可能性があります。

番号が多すぎます

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

この複数のフィールドを同時に検証するにはどうすればよいですか?

4

2 に答える 2

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
    }
}
于 2012-10-03T14:09:24.480 に答える
0

コールバックバリデーターを使用して独自のソリューションを作成します。

例はここにあります:http://packages.zendframework.com/docs/latest/manual/en/modules/zend.validator.set.html#callback

于 2012-10-04T09:20:31.893 に答える