Zend Framework:Ein Zend_Form_Element-Formularfeld als erforderlich festlegen. Wie ändere ich den verwendeten Validator, um sicherzustellen, dass das Element nicht leer ist?

StackOverflow https://stackoverflow.com/questions/34848

  •  09-06-2019
  •  | 
  •  

Frage

Bei Verwendung von a Zend_Form, ist die einzige Möglichkeit, zu überprüfen, ob eine Eingabe nicht leer bleibt, Folgendes:

$element->setRequired(true);

Wenn dies nicht festgelegt ist und das Element leer ist, wird meines Erachtens keine Validierung für das Element ausgeführt.

Wenn ich es verwende setRequired(), erhält das Element automatisch den Standard-NotEmpty-Validator.Die Sache ist, dass die Fehlermeldung bei diesem Validator scheiße ist: „Wert ist leer, aber ein nicht leerer Wert ist erforderlich“.Ich möchte diese Nachricht ändern.Im Moment habe ich dies getan, indem ich das geändert habe Zend_Validate_NotEmpty Klasse, aber das ist ein bisschen kitschig.

Idealerweise möchte ich meine eigene Klasse verwenden können (abgeleitet von Zend_Validate_NotEmpty), um die Nicht-Leer-Prüfung durchzuführen.

War es hilfreich?

Lösung

Ich habe es so gemacht (ZF 1.5):

$name = new Zend_Form_Element_Text('name');
$name->setLabel('Full Name: ')
     ->setRequired(true)
     ->addFilter('StripTags')
     ->addFilter('StringTrim')
     ->addValidator($MyNotEmpty);

Daher ist addValidator() der interessante Teil.Die Nachricht wird in einer „Errormessage-Datei“ festgelegt (um alle benutzerdefinierten Nachrichten in einer Datei zu bündeln):

$MyNotEmpty = new Zend_Validate_NotEmpty();
$MyNotEmpty->setMessage($trans->translate('err.IS_EMPTY'),Zend_Validate_NotEmpty::IS_EMPTY);

hoffe das hilft...

Andere Tipps

Standardmäßig weist setRequired(true) isValid() an, eine NonEmpty-Validierung hinzuzufügen falls es noch keines gibt.Da diese Validierung erst erfolgt, wenn isValid() aufgerufen wird, können Sie die Meldung nicht festlegen.

Die einfachste Lösung besteht darin, vor dem Aufruf von isValid() einfach manuell eine NonEmpty-Validierung hinzuzufügen und die Meldung entsprechend festzulegen.

$username = new Zend_Form_Element_Text('username');
$username->setRequired(true)
         ->addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Empty!')));

Fügen Sie einen NotEmpty-Validator hinzu und fügen Sie Ihre eigene Nachricht hinzu:

// In the form class:
$username = $this->createElement('text', 'username');
$username->setRequired();  // Note that this seems to be required!
$username->addValidator('NotEmpty', true, array(
    'messages' => array(
        'isEmpty' => 'my localized err msg')));

Notiz dass der NotEmpty-Validator anscheinend nicht ausgelöst wird, es sei denn, Sie haben auch setRequired() für das Element aufgerufen.

Rufen Sie im Controller (oder wo auch immer) $form->setTranslator($yourTranslator) auf, um die Fehlermeldung zu lokalisieren, wenn sie auf der Seite gedruckt wird.

Ändere das Fehlermeldung.

Soweit ich das beurteilen kann Änderung der Fehlermeldung hat keine Möglichkeit, die Meldung eines bestimmten Fehlers zu ändern.Außerdem sieht es im Handbuch so aus, als wäre dies eine Funktion, die zu Zend_Form gehört, aber ich erhalte die Fehlermeldung „Methode nicht gefunden“, wenn ich sie auf einer Instanz von Zend_Form verwende.

Und ein Anwendungsbeispiel wäre wirklich toll.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top