【问题标题】:Categorising FlashMessenger messages in Zend Framework在 Zend Framework 中对 FlashMessenger 消息进行分类
【发布时间】:2011-02-01 15:06:47
【问题描述】:

在 Zend Framework 中使用 FlashMessenger 帮助器对 Flash 消息进行分类(警告、成功、错误)的最简单方法是什么?我还想要一种方法来检查控制器可能不一定转发请求的消息。目前,我相信这是通过 FlashMessenger::getCurrentMessage() 完成的?

【问题讨论】:

标签: zend-framework


【解决方案1】:

在你的控制器中,你可以这样做:

$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('notice'); ?>

还有这样的错误:

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

编辑:

检查this link

... 在这里调用常规的 getMessages() 方法是行不通的。这仅返回 FlashMessenger 实例化时存储在适当 ZendSession 名称空间中的消息。由于当时添加的任何消息都不在 ZendSession 命名空间中(因为 FlashMessenger 已被实例化以添加消息),因此 getMessages() 不会返回它们。

对于这个用例,FlashMessenger 还提供了一个getCurrentMessages() 方法(和一个相关的当前方法系列),它返回当前请求中设置的那些消息。

【讨论】:

    【解决方案2】:

    好的,感谢大家的意见,不过我实施了不同的方法。

    我已经有一个扩展 Zend_Controller_Action 的父控制器,我在其中放置了跨应用程序的通用逻辑,因此在 postDispatch() 方法中,我将 getCurrentMessages 和 getMessages 合并到一个视图变量中。

    public function postDispatch()
    {
        $messages = array_merge(
            $this->_helper->flashMessenger->getCurrentMessages(),
            $this->_helper->flashMessenger->getMessages()
        );
        $this->view->messages = count($messages) > 0 ? $messages[0] : array();
    }
    

    我通过控制器操作设置消息,例如:

    $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; ?>
    

    这对我有用,因为消息是分类的,除了下一个重定向之外,还可以从当前请求中获取。

    【讨论】:

      【解决方案3】:

      两个想法。

      1. PHPPlaneta

      查看 Robert Basic 的 PHPlaneta 源代码:

      https://github.com/robertbasic/phpplaneta

      他使用标准的 FlashMessenger 动作助手:

      $this-&gt;_helper-&gt;flashMessenger()-&gt;addMessage(array('fm-bad' =&gt; 'Error occurred')

      然后定义一个名为FlashMessenger 的视图助手,以便他可以访问消息。在他的布局或视图脚本中,他简单地调用:

      &lt;?php echo $this-&gt;flashMessenger(); ?&gt;

      视图助手使用键(例如:'fm-bad')为输出消息设置 CSS 样式。

      2。优先信使

      查看 Sean P. O. MacCath-Moran 的 Priority Messenger 视图助手:

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

      我喜欢这一点的是,保存消息以显示在下一页加载的整个业务让我觉得应该完全在视图中。因此,在您的操作中,在重定向之前,您使用您的消息和您的优先级填充视图助手。然后,在您的布局或视图脚本中,您通过相同的视图助手输出这些消息及其优先级。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-05
        相关资源
        最近更新 更多