2011-02-01 10 views
3

FlashMessengerヘルパーを使用して、Zend Frameworkで(警告、成功、エラー)フラッシュメッセージを分類する最も簡単な方法は何ですか?また、コントローラが必ずしも要求を転送していない可能性があるメッセージをチェックする単一のメソッドが必要です。現時点では、これはFlashMessenger :: getCurrentMessage()を介して行われていると思いますか?Zend FrameworkでのFlashMessengerメッセージの分類

+0

これを達成する別の方法は、ここで見つけることができます:http://stackoverflow.com/questions/3950637/type-of-flash-messenger-in-zend – Gardner

答えて

10

あなたはこれを行うことができますコントローラいるで:

<?php echo $this->flashMessenger('notice'); ?> 

そして、このようなエラー:

$this->_helper->FlashMessenger(
    array('error' => 'There was a problem with your form submission.') 
); 
$this->_helper->FlashMessenger(
    array('notice' => 'Notice you forgot to input smth.') 
); 

には、表示しているでは、このような通知をエコーすることができます

<?php echo $this->flashMessenger('error'); ?> 

編集:

チェックthis link

...ここで通常のgetMessages()メソッドを呼び出すことはできません。これは、FlashMessengerがインスタンス化されたときに適切なZendSession名前空間に格納されたメッセージのみを返します。このリクエストを追加したメッセージは、その時点で(FlashMessengerがメッセージを追加するためにインスタンス化されていたため)ZendSession名前空間にないため、getMessages()によって返されません。

このユースケースの場合、FlashMessengerは現在のリクエストで設定されたメッセージを返すgetCurrentMessages()メソッド(および関連する現在のメソッドのファミリ)も提供します。

2

2つのアイデア。

1. PHPPlaneta

ロバート・基本的なことでPHPlanetaのソースコードをチェックアウト:

https://github.com/robertbasic/phpplaneta

彼は標準FlashMessengerアクションヘルパーを使用しています。

$this->_helper->flashMessenger()->addMessage(array('fm-bad' => 'Error occurred')

次に、ビューヘルパーを定義します。彼はメッセージにアクセスできるようにFlashMessengerと呼ばれています。彼のレイアウトやビュースクリプトでは、彼は単に呼び出します。

<?php echo $this->flashMessenger(); ?>

ビューヘルパーがキー(例:'fm-bad')を使用して出力メッセージのためのCSSスタイルを設定します。

2. PriorityMessenger

ショーンPO MacCath-モランから優先メッセンジャーのビューヘルパーをチェックアウト:

http://emanaton.com/code/php/zendprioritymessenger

私はこれを好きな事は、メッセージを保存すること、この全体のビジネスです次のページに表示するためには、完全にビュー内にあるべきものとして私を襲います。そのため、あなたのリダイレクトの前に、あなたのメッセージと優先順位を表示ヘルパーに取り込みます。レイアウトやビュースクリプトでは、同じビューヘルパーを使用して優先順位を付けてメッセージを出力します。

2

皆様のご意見ありがとうございますが、私は別のアプローチを実装しました。

私はすでにアプリケーション全体に共通ロジックを配置しているZend_Controller_Actionを拡張する親コントローラを持っていました。したがって、postDispatch()メソッドでは、getCurrentMessagesとgetMessagesをビュー変数にマージしました。

私はコントローラのアクションでメッセージを設定しました。

$this->_helper->flashMessenger(array('error'=>'This is an error')); 

私のレイアウトファイルでは、$ messages変数で条件を使用しています。

<?php if(count($this->messages) > 0) : ?> 
//.. my HTML e.g. key($this->messages) returns 'error' 
// current($this->messages) returns 'This is an error' 
<?php endif; ?> 

メッセージが分類され、次のリダイレクトに加えて現在の要求から取得できるので、これは私にとっては役立ちます。