2012-10-03 6 views
5

Ich habe 5 Textformzf2 Validierungsformular: Wie kann ich abhängige Felder validieren?

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

mit den entsprechenden Filter

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

Ich würde, dass nur eine dieser drei Formen einen Wert von 0 verschieden Es gibt dann zwei mögliche Fehler enthalten kann.

ZU VIELE ZAHLEN

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

Wie kann ich dies mehrere Felder zur gleichen Zeit zu validieren?

Antwort

17

Sie müssen Ihre eigene Validator Klasse schreiben, um dies zu tun. Die MethodeIhrer neuen Validierungsklasse erhält auch die $context, die die Werte des gesamten Formulars enthält. Auf diese Weise können Sie den Wert jedes Feldes in Abhängigkeit von den anderen Feldern validieren.

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

danke! es funktioniert, aber wie kann ich diesen Übersetzer in ValidatorPluginManager registrieren? – chrvadala

+0

welcher Übersetzer? –

+1

weiß ich nicht, aber Sie können nur den vollständigen Klassennamen (String) als Name für den Validator in einer Eingabespezifikation übergeben –