2012-03-24 12 views
1

Zend_Formのすべての例で見つかったフォームを表示するビューは、そのアクションが処理されるアクションに対応しています。しかし、私は、複数の独立したフォームを表示し、それぞれのフォームを処理する別々のアクション(ビューは使用されていない)が必要です。Zend Formのパスワード検証エラーを他のアクションに表示

個々のアクションにリダイレクトするのは問題ありません。フォームはそこで処理されますが、検証エラーが表示されたら、各アイテムの横にある共通のビューZend_Formスタイルで表示します。私が理解するように、フォームにデータが入力されると(無効なデータで)、エラーが自動的に表示されます。その後、フォームが無効な場合は、FlashMessengerを使用して無効なコンテンツを保存し、主な共通アクションにリダイレクトしてフォームを入力します。

問題は、パスワードフィールドで発生します。これらはもちろん、実装されることを拒否し、したがってエラーメッセージを表示しません。どのエラーが発生したかを手動で把握することなく表示できますか? P

PS:

はあなたの注意と私の英語とあなたの忍耐をありがとうより良く理解するために、私は私は何をすべきかを説明するサンプルコードを追加...私は理解したよう

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

    ... 

} 

答えて

1

フォームにデータが入力されたときに、エラー が自動的に表示されます。

これは無効な値でフォームを移入する場合は、バリデータを実行し、適切なエラーメッセージでフォームや要素をマークするために、再びisValidを呼び出す必要がありますが、そうではありません。

FlashMessengerの各要素のエラーメッセージを保存し、エラーメッセージを各要素に再接続することもできますが、isValidも再度呼び出すことができます。 File要素のフォームを使用したことがある場合は、アップロードしたファイルで要素を再入力できないため、エラーメッセージを保存する必要があります。

問題はパスワードフィールドで発生します。これらは、もちろん、 の入力を拒否します。

あなたはrenderPasswordフラグ(例:$el->setRenderPassword())を設定した場合、各パスワードフィールドに、彼らは、値の残りの部分と一緒に移入されますと、あなたがisValidを呼び出す際に、パスワードフィールドが検証され、任意の適切なエラーメッセージが希望表示されます。

希望に役立ちます。

+0

問題は、 'populate'への呼び出しを 'isValid'に置き換えて、もちろん同じ引数で置き換えるだけで解決されます。今すぐエラーメッセージが期待どおりに表示されます。実際には安全ではないと感じているため、フィールドにパスワードを入力する必要はありません。検証エラーメッセージを表示するだけです。 ありがとうございます! – davidgnin

関連する問題