• Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

Input mit unterschiedlichem Verhalten für jeden Validator

Wer?

New member
Hallo,

ich habe folgendes Input-Feld:

PHP:
        $input = new Input('input');
        $input->setContinueIfEmpty(true);
        $input->getValidatorChain()->attach((new ModRequiredValidator())->setMessage("'Pflichtfeld."), true);
        $input->getValidatorChain()->attach((new Regex(array('pattern' => '#^[A-Z][0-9]\.[0-9]{1,2}$#')))->setMessage("Bitte in Form 'A1.23'."));
Ich möchte gerne, dass der erste Validator immer geprüft wird, also auch bei leerem Input, der zweite Validator allerdings nur, wenn etwas in dem Feld steht. ModRequiredValidator ist ein Selbst geschriebener Validator, der Ausnahmen macht, dardurch kann es sein, dass ein Feld leer ist, aber trotzdem von ModReqiredValidator akzeptiert wird. Wenn ich nun aber "allowEmpty" auf true setze, dann funktioniert der erste Vaidator nicht wie gewünscht. Im Prinzip würde ich gerne "allowEmpty" pro Validator definieren. Gibt es dafür eine Möglichkeit?

Bevor dies als Antwort kommt: Ein möglicher Workaround wäre einen ModRegex-Validator zu definieren, der die leere Eingabe erlaubt. Ich finde diese Lösung allerdings nicht sehr sauber, auch da ich das gleiche Problem noch mit Email, Digits und Date Validatoren habe.
 

Kaiuwe

Super-Moderator
Im Prinzip würde ich gerne "allowEmpty" pro Validator definieren. Gibt es dafür eine Möglichkeit?
Nein, dies gibt es nicht.

Du könntest aber vielleicht deinen Validator erweitern und dort intern eine Kette von Prüfklassen („ValidatorChain“) verwenden. Damit wäre es möglich, die Validatoren je nach Bedarf hinzuzufügen oder zu entfernen. (Per „Zend\Validator\Callback“ ließe sich dies ebenfalls implementieren.)

(Hinweis nebenbei: eine Kette von Prüfklassen („ValidatorChain“) implementiert das Interface „Zend\Validator\ValidatorInterface“ und kann damit wie eine einzelne Validator-Klasse verwendet werden.)
 
Zuletzt bearbeitet:

Wer?

New member
Danke für die schnelle Antwort, ich werde mich bei Gelegenheit, mal etwas intensiver mit der ValidatorChain befassen. Für den Moment macht es auch der oben angesprochene Workaround (den habe ich in der Zwischenzeit implementiert):

PHP:
class ModRegexlValidator extends Regex {

    public function isValid($value, array $context = array())
    {
        if($value == ""){
            return true;
        } else {
            return parent::isValid($value, $context);
        }
    }
}
 

Kaiuwe

Super-Moderator
Wer?;82916Für schrieb:
den Moment macht es auch der oben angesprochene Workaround (den habe ich in der Zwischenzeit implementiert):
Ich würde dies sogar als korrekt ansehen, wenn das das explizite Verhalten der Prüfklasse ist.
 
Oben