zf2验证表单:如何验证依赖字段?

时间:2012-10-03 10:52:02

标签: zend-form zend-framework2

我有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个表单中只有一个可以包含不同于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;

如何同时验证这多个字段?

2 个答案:

答案 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
    }
}

答案 1 :(得分:0)

使用Callback验证器制作您自己的解决方案。

示例如下:http://packages.zendframework.com/docs/latest/manual/en/modules/zend.validator.set.html#callback