【问题标题】:zend framework flash messanger message and redirectzend 框架 flash messanger 消息和重定向
【发布时间】:2012-05-15 14:56:28
【问题描述】:

所以我正在使用 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 做些什么来使其正常工作?最好的做法是什么?

【问题讨论】:

    标签: zend-framework action helper flash-message


    【解决方案1】:

    在你的控制器中

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

    【讨论】:

    • 这一次只会收到一条消息..你不能迭代
    • 我从来没有遇到过多于一条消息的需求。
    • 这目前工作正常,但我有一个问题,为什么当我使用 _helper 时,net beans 中的自动完成不显示自动完成,我该如何做到这一点??
    • @dorinaji 由于助手使用 php 魔术函数 __call 因此无法确定助手的名称。但是 Zend Studio (IDE) 确实显示了助手的自动完成功能,因为它知道 ZF 结构。它是我自己使用 Zend Studio 的重要功能之一。
    【解决方案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 } } }?>
    

    【讨论】:

      【解决方案3】:

      这应该在控制器中工作

      /**
       * @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;
      }
      

      【讨论】:

      • 控制器不应该真正保持状态;因此,为它们创建变量不是好的做法。相反,只需使用$this-&gt;_helper-&gt;flashMessenger,或者如果厌倦了手写输入,则将每个操作指定为$flashMessenger = $this-&gt;_helper-&gt;flashMessenger。如果您不使用模型,请使用请求对象作为请求中的状态。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      相关资源
      最近更新 更多