2012-03-24 5 views
1

In allen Beispielen, die ich von Zend_Form finde, entspricht die Ansicht des Formulars der Aktion, in der es verarbeitet wird. Ich möchte jedoch eine Ansicht, die mehrere unabhängige Formulare und separate Aktionen zum Verarbeiten jedes Formulars anzeigt (dessen Ansicht nicht verwendet wird).Zeige Password Validierungsfehler eines Zend Formulars auf einer anderen Aktion

Umleiten zu einzelnen Aktionen ist kein Problem, die Formulare werden dort verarbeitet, aber wenn Validierungsfehler angezeigt werden, möchte ich, dass sie in der allgemeinen Ansicht neben jedem Element angezeigt werden, Zend_Form Stil. Wenn ein Formular ausgefüllt wird (mit ungültigen Daten), werden Fehler automatisch angezeigt. Wenn ein Formular ungültig ist, verwende ich FlashMessenger, um den ungültigen Inhalt zu speichern, um dann zu der allgemeinen Hauptaktion umzuleiten und das Formular mit ihm zu füllen.

Das Problem tritt bei den Passwortfeldern auf. Diese weigern sich natürlich, ausgefüllt zu werden, und zeigen daher keine Fehlermeldung an. Kann ich es anzeigen, ohne manuell herausfinden zu müssen, welcher Fehler aufgetreten ist?

Vielen Dank für Ihre Aufmerksamkeit und Ihre Geduld mit meinem Englisch: P

PS: Zum besseren Verständnis ich einen Beispielcode anhängen zu erklären, was ich tun ...

class TestController extends Zend_Controller_Action 
{ 

    ... 

    public function commonAction() { 
     /*Initialize form objects*/ 
     $form1 = new Application_Form_Form1(); 
     ... 
     $formN = new Application_Form_FormN(); 

     /*Fill forms if needed*/ 
     $flashMess = $this->_helper->FlashMessenger; 
     if ($flashMess->hasMessages()) { 
      $messages = $flashMess->getMessages(); 
      switch ($messages[1]) { 
       case 'form1': 
        $form1->populate($messages[0]); 
        break; 
       ... 
       case 'formN': 
        $fotmN->populate($messages[0]); 
        break; 
       default: 
        ... 
        break; 
      } 
     } 

     /*Assign to the view*/ 
     $this->view->form1 = $form1; 
     ... 
     $this->view->formN = $formN; 
    } 

    public function form1Action() { 
     if ($this->getRequest()->isPost()) { 
      $form1 = new Application_Form_Form1(); 
      $data = $this->getRequest()->getPost(); 
      if ($form1->isValid($data)) { 
       ... 
      } else { 
       $this->_helper->FlashMessenger($data); 
       $this->_helper->FlashMessenger('form1'); 
      } 
     } 
     $this->redirect('/test/common'); 
    } 

    ... 

} 

Antwort

1

Wie ich verstehe Wenn ein Formular ausgefüllt wird (mit ungültigen Daten), werden Fehler automatisch angezeigt. Diese

nicht der Fall ist, wenn Sie das Formular mit ungültigen Werten zu füllen, werden Sie isValid wieder, um verlangen, um die Validierer zu laufen und markieren Sie die Form und Elemente mit den entsprechenden Fehlermeldungen.

Sie könnten auch die Fehlermeldungen für jedes Element in der FlashMessenger speichern und dann auf jedes Element anzubringen, die Fehlermeldungen zurück, aber Sie können isValid auch wieder aufrufen. Wenn Sie jemals ein Formular mit einem File Element verwendet haben, müssten Sie die Fehlermeldung speichern, da Sie das Element mit der hochgeladenen Datei nicht erneut füllen könnten.

Das Problem tritt bei den Passwortfeldern auf. Diese lehnen natürlich ab, um bevölkert zu werden.

Wenn Sie die renderPassword Flagge (ex: $el->setRenderPassword()), die auf jedem Passwort-Feld, werden sie mit dem Rest der Werte bevöl entlang und wenn Sie isValid aufrufen, wird das Passwort-Feld validiert werden und jede entsprechende Meldung Fehler würde erscheinen.

Hoffe, dass hilft.

+0

Das Problem wird gelöst, einfach den Aufruf zu "populate" mit einem zu "isValid" mit natürlich dem gleichen Argument zu ersetzen. Jetzt erscheinen Fehlermeldungen wie erwartet. Ich möchte die Felder nicht wirklich mit dem Passwort füllen, weil ich denke (fühle mich, tatsächlich), es ist nicht sicher, ich möchte nur Validierungsfehlermeldungen anzeigen. Vielen Dank! – davidgnin