2009-08-13 6 views
8

私は、入力をフォームからモデルクラスに渡して検証を実行するコントローラを持っています。 検証が成功した場合は、フローを続行してコントローラに関連付けられているデフォルトビューをレンダリングします。別のビュースクリプトをZendしますか?

私の問題は、検証が成功しなかった場合、モデルに検証エラーメッセージを戻して別のビューに表示させたいということです。代替ビューでエラーメッセージを設定するにはどうすればよいですか?

ありがとうございます。

答えて

4

エラーメッセージを別のビューで表示したいのはなぜですか?ビューに条件文を作成してみませんか?フォームにエラーがあり、エコーメッセージがエコーフォームになっているようなもの。

$ this - > _ forwardを使用すると、それぞれのビューで別のアクションに転送できます。あなたは何でも好きなものを渡すことができます。フォームオブジェクトを渡すだけで、すべてのエラーメッセージが表示されます。または、フォームオブジェクトから特定のエラーメッセージまたはすべてのエラーメッセージを取得して、ビューまたはアクションに渡すこともできます。

+0

おそらく同じように表示する必要があります。 validateメソッドでは、どのような検証に失敗したかに基づいてエラーメッセージを返しています。それが合格した場合は、空の状態に戻り、検証からの戻り値が空でない場合はビューをチェックインします。これはあなたが意味するものです – db83

+0

あなたは手動で妥当性チェックを行っているようです。しかし、これはバリデーターの前にあり、すべてのテストが成功したかどうかを知るために$ form-> isValid()を呼び出すだけです。 ZFが提供していないバリデータが必要な場合は、独自のカスタムバリデータを作成し、ビルドされたバリデータとまったく同じ方法でプラグインすることができます。たとえば、if($ form-> isValid())をチェックしてから、$ form-> populateを使用して、表示されたフォームを送信したり、成功メッセージを送信したりする場合はエラーメッセージを送信します。 – markus

+0

また、常にビューでチェックを行うこともできます。 if($ form-> hasErrors)と同じように表示し、そうでない場合はそれを表示します。 (!擬似コード!) – markus

11

さて、あなたは別のコントローラで別のアクションにリダイレクトすることができ、コントローラから:

$this->_forward($newactionname, 
         $newcontrollername, 
         $newmodulename, 
         Array($parameters_to_pass); 
    } 

またはあなただけのだけの異なるビューファイルのレンダリング:

$this->render('index_alternative'); 
9

あなたが同じコントローラのアクションにリダイレクトされている場合は、ちょうどます$ this-を使用してアクションを直接呼び出す)(_forward使用しないでください> fooAction()、 - > _フォワード(「FOO」.. 。

コントローラが構築されているために発生する可能性のあるパフォーマンスとエラーです。あなたが_forwardを呼び出すと、予期したものが実行されるだけでなく、init()とコンストラクタも呼び出されますあなたのコントローラが他のコントローラから拡張されている場合は、init()を含め、これらのコントローラもすべて呼び出されます。init()にコードがあれば、それは2回実行されます。それは2回行を書きます!直接アクションを行い、代わりに$ this-> render()を使用してください。

コードをプロファイルすると、この問題が簡単に表示されます。

+0

+1おい、私はtharkunがリダイレクトするとは信じられません。 :/ –

+0

+1、私はそれをタップ! – Marecky

関連する問題