2012-05-07 10 views
3

私はzend-framworkを使ってプロジェクトを作成していますが、私はフラッシュメッセンジャーヘルパーを実装しようとしていますが、それを実装するための良いプラクティスを見つけることはできません。 私が必要とするのは、メッセージがlayout.phtmlの特定の場所に直接表示される間に、フラッシュメッセンジャーを使ってメッセージを送信してリダイレクトすることです。 私はリダイレクタのために、私はそれを行うことができることを知っている:zend framework flash messangerメッセージとリダイレクト

$redirector = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); 
$redirector->gotoUrl('/my-controller/my-action/param1/test/param2/test2') 
       ->redirectAndExit();' 

が、私はそれを動作させるためにフラッシュメッセンジャーに何ができますか?それのベストプラクティスは何ですか?

答えて

6

コントローラ内

public function init() 
{ 
$messages = $this->_helper->flashMessenger->getMessages(); 
if(!empty($messages)) 
$this->_helper->layout->getView()->message = $messages[0]; 
} 
あなたlayout.phtmlで

<!-- Global notification handling to use call flashMessenger action helper --> 
    <?php if(isset($this->message)) :?> 
    <div class="notification"> 

    <?php echo $this->message ;?> 

    </div>  
<?php endif;?> 

あなたは

public function loginAction() 
{ 
$this->_helper->flashMessenger('Login is success'); 
$this->_helper->redirector('home'); 
} 

にほぼすべての時間をそれを使用したい時はいつでもその後、あなたはflashMessengerを使用した後にリダイレクトされます。

+0

これは、一度に1つのフラッシュメッセージだけを取得します。あなたは反復できません。 – coolguy

+0

私は決して1つ以上のメッセージを必要としません。 –

+0

これは今のところうまくいきましたが、_helperを使用しているときにネットビーンの自動完了が表示されないのはなぜですか? –

0

これは、コントローラのZend フラッシュメッセンジャーの使用方法

/** 
* @var Zend_Controller_Action_Helper_FlashMessenger 
*/ 
protected $flashMessenger = null; 


/** 
* initalize flash messenger 
* 
* @return void 
*/ 
public function init() 
{ 
    $this->flashMessenger = $this->_helper->FlashMessenger; 
} 

/** 
* Action wich is redirectin.. and sets message 
* 
* @return void 
*/ 
public function actiononeAction() 
{ 
    $this->flashMessenger->addMessage('FLY HiGH BiRD!'); 
    $this->_redirect('/whatever/url/in/your/project'); 
} 

/** 
* display messages from messenger 
* 
* @return void 
*/ 
public function displayAction() 
{ 
    $myMessages = $this->flashMessenger->getMessages(); 
    $this->view->messages = $myMessages; 
} 
+0

コントローラは本当に状態を保持するべきではありません。したがって、それらの変数を作成することは良い方法ではありません。代わりに、単純に '$ this-> _ helper-> flashMessenger'を使用するか、入力行に飽きた場合はアクションごとに' $ flashMessenger = $ this-> _ helper-> flashMessenger'を割り当てます。モデルを使用していない場合は、要求内の状態に対して要求オブジェクトを使用します。 – shrikeh

2

内部の作業を行う必要がありますが、あなたが

<?php if(isset($this->flashmsgs)) { ?> 
       <?php foreach($this->flashmsgs as $msg){ 
         foreach ($msg as $key=>$diserrors) { 
         if($key=="error"){?> 
     //do wat you want with your message 
<?php } } }?> 
ビューの部分では 'foo' で

public function fooAction(){ 

$flashMessenger = $this->_helper->getHelper('FlashMessenger'); 
//some codes 
$flashMessenger->addMessage(array('error' => 'This is an error message')); 
$this->_redirect('/someothercontroller/bar'); 

} 
//someothercontroller/barAction 
public function barAction(){ 

$flashMessenger = $this->_helper->getHelper('FlashMessenger'); 
$this->view->flashmsgs = $flashMessenger->getMessages(); //pass it to view 

} 

というアクションがあるとし

関連する問題