2016-04-18 6 views
0

Ich benutze einen Eingangsfilter mit Standard ZF2 Validatoren/Filter. Allerdings erweitere ich auch die Methode \My\InputFilter::isValid um eine domänenspezifische Validierung, z. B. zum Vergleichen bestimmter Teile von Daten.zf2 inputfilter - wie man eine fehlerhafte benutzerdefinierte Validierung zurückgibt

Wie signalisiere ich innerhalb dieser Methode, dass die Validierung fehlgeschlagen ist, mit einer spezifischen Fehlermeldung für die fehlerhaften Elemente? Ich kann in der Methode false zurückgeben, aber das liefert keine weiteren Informationen darüber, warum die Validierung fehlgeschlagen ist.

dh:

public function isValid($context = null){ 

     $latestCollectionInput = $this->get('latestCollectionTime'); 
     $requestedCollectionTime = $this->get('requestedCollectionTime'); 

     $date1 = \DateTime::createFromFormat('d/m/Y H:i', $latestCollectionInput->getRawValue()); 
     $date2 = \DateTime::createFromFormat('d/m/Y H:i', $requestedCollectionTime->getRawValue()); 

     if($date1->format('N') !== $date2->format('N')){ 
      /* how to return failed validation for these elements */    
     } 

     return parent::isValid($context); 
    } 

Antwort

0

In der AbstractValidator Klasse gibt es eine error Methode für diesen Zweck. Sie können es here on line 329 on GitHub finden.

Also, wenn bei der Validierung entdecken Sie ein Wert ist ungültig Sie tun können:

$this->error($key, $value); 

Normalerweise werden die Schlüssel in der Validator-Klasse als Konstanten gespeichert sind:

const ERROR_DATE_NOT_VALID = 'dateNotValid'; 
const ERROR_NOT_FUTURE_DATE = 'dateNotFutureDate'; 

und entsprechende Nachrichten werden gespeichert in a $messageTemplates array:

protected $messageTemplates = array(
    self::ERROR_DATE_NOT_VALID => "Date must be a string and must be formatted as yyyy-mm-dd", 
    self::ERROR_NOT_FUTURE_DATE => "The provided date must be in the future", 
); 

Wenn die i nput filter sammelt Fehlermeldungen bei fehlgeschlagener Validierung Der Schlüssel, den Sie übergeben haben, wird verwendet, um die Nachricht in der Vorlagenliste zu finden. Diese Nachrichten werden zurückgegeben. Also, wenn Sie werfen einen Fehler den Schlüssel wie folgt aus:

$this->error(self::ERROR_DATE_NOT_VALID, $value); 

Die Nachricht, die zurückgegeben werden wird:

"Date must be a string and must be formatted as yyyy-mm-dd" 

Lesen Sie mehr auf individuelle Schreiben Validierer here in the official ZF2 docs

+0

Was Sie sagen, ist völlig korrekt. Allerdings bin ich mir nicht sicher, welcher Validator 'this-> error() 'aktiviert hat, da die Validierung in der' InputFilter :: IsValid() 'Methode erfolgt - dies liegt daran, dass (soweit ich weiß) dies der Fall ist keine Validatoren oder Möglichkeiten, zwei Werte in einem Validator zu vergleichen. Ich bin mir also nicht sicher, wie oder welcher Validator als fehlgeschlagen gesetzt werden soll. –

+0

@JohnCrest Sie können abhängige Felder validieren (also auch vergleichen) mit [einem ZF2-Callback-Validierer] (http://framework.zend.com/manual/current/de/modules/zend.validator.callback.html) (Lesen Sie hier auch mehr [in dieser Frage zu stackoverflow] (http://stackoverflow.com/q/17529906/1697459)) – Wilt

Verwandte Themen