3

所以我正在使用 zend-framwork 创建一个项目,我正在尝试实现 flash messenger 助手,但我找不到任何好的实践来实现它。我需要的是使用 flash messenger 发送消息并重定向,而消息将直接出现在 layout.phtml 中的特定位置。我知道对于重定向器我可以这样做:

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

我可以对 flash messenger 做些什么来使其正常工作?什么是最好的做法?

4

3 回答 3

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 后都会重定向。

于 2012-05-07T08:25:26.470 回答
2

如何在 Zend 中使用 flash messenger 假设您有一个名为 '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 

}

在你看来部分

<?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 } } }?>
于 2012-05-07T05:45:21.853 回答
0

这应该在控制器内工作

/**
 * @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;
}
于 2012-05-07T05:42:09.750 回答