2012-10-03 23 views
5

Tôi có hình thức văn bản 5mẫu xác thực zf2: Làm cách nào để xác thực các trường phụ thuộc?

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

với các bộ lọc tương đối

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

tôi sẽ rằng chỉ có một điều này 3 hình thức có thể chứa một giá trị khác nhau từ 0. Có sau đó hai lỗi có thể.

QUÁ NHIỀU SỐ

$data['number1'] = 5; 
$data['number2'] = 5; 
$data['number3'] = 0; 
$data['number4'] = 5; 
$data['number5'] = 0; 

KHÔNG SỐ

$data['number1'] = 0; 
$data['number2'] = 0; 
$data['number3'] = 0; 
$data['number4'] = 0; 
$data['number5'] = 0; 

Làm thế nào tôi có thể xác nhận điều này nhiều lĩnh vực cùng một lúc?

Trả lời

17

Bạn cần phải viết riêng lớp học Validator của mình để làm như vậy. Phương thức isValid() của lớp xác thực mới của bạn cũng nhận được $context bao gồm các giá trị của toàn bộ biểu mẫu. Bằng cách này bạn có thể xác nhận giá trị của mỗi trường tùy thuộc vào các trường khác.

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

cảm ơn bạn! nó hoạt động, nhưng làm thế nào tôi có thể đăng ký dịch giả này trong ValidatorPluginManager? – chrvadala

+0

dịch giả nào? –

+1

dunno, không sử dụng này, nhưng bạn chỉ có thể vượt qua đầy đủ classname (string) như tên cho validator trong một đặc tả đầu vào –