8


0

検証を実行するために、フォームからモデルクラスに入力を渡すコントローラがあります。 検証が成功したら、フローを続行してコントローラに関連付けられたデフォルトビューをレンダリングできるようにします。

私の問題は、検証が成功しなかった場合、検証エラーメッセージをモデルに送り返して別のビューに表示したいということです。 代替ビューにエラーメッセージを設定する方法を教えてください。

前もって感謝します。

4 Answer


11


まあ、コントローラからそれらを別のコントローラの別のアクションにリダイレクトすることができます:

$ this  - > _ forward($ newactionname、$ newcontrollername、$ newmodulename、Array($ parameters_to_pass);}

または単に別のビューファイルをレンダリングするだけです。

$ this-> render( 'index_alternative');


9


同じコントローラ内のアクションにリダイレクトしている場合は_forward()を使用しないでください。単に$ this→ fooAction()を使用して直接呼び出してください。

その理由は、コントローラーがwticeで構成されているために発生する可能性があるパフォーマンスとエラーです。 _forwardを呼び出すと、事前ディスパッチが再実行されるだけでなく(予想されることです)、init()とコンストラクタも再度呼び出されます。 あなたのコントローラが他のコントローラから拡張されている場合、それらのinit()を含むそれらすべてのコントローラも呼ばれます。 init()にコードがある場合は2回実行され、データベースに書き込む場合は行が2回書き込まれます。 全体を避けて直接アクションを呼び出して代わりに$ this→ render()を使ってください。

あなたがあなたのコードをプロファイルするならば、あなたはこの問題を容易に見ることができます、


4


エラーメッセージを別のビューに表示したいのはなぜですか? ビューに条件式を組み込んでみませんか? formにエラーがある場合はメッセージをエコーし​​、そうでない場合はformをエコーし​​ます。

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


0


FlashMessengerは解決策の一部になるでしょうか http://framework.zend.com/manual/en/zend.controller.actionhelpers.html