2012-10-03 17 views
5

devo modulo 5 testomodulo di convalida zf2: come posso convalidare i campi dipendenti?

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

con i relativi filtri

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

voglio che solo uno di questo 3 moduli può contenere un valore diverso da 0. Vi sono poi due possibili errori.

troppi numeri

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

NO NUMERO

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

Come posso convalidare questo più campi contemporaneamente?

risposta

17

È necessario scrivere la propria classe Validator per farlo. Il metodo della nuova classe di convalida riceve anche il $context che include i valori dell'intero modulo. In questo modo puoi convalidare il valore di ogni campo a seconda degli altri campi.

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

grazie! funziona, ma come posso registrare questo traduttore in ValidatorPluginManager? – chrvadala

+0

quale traduttore? –

+1

non lo so, non usando questo, ma puoi semplicemente passare il nome completo della classe (stringa) come nome per il validatore in una specifica di input –

Problemi correlati