Zend Framework 2 Flash Messenger没有返回任何消息

时间:2014-02-04 10:32:06

标签: php zend-framework zend-framework2 flashmessenger

我在ZF2中遇到了一个相当奇怪的flash信使问题。我在一个非常简单的场景中使用它,在注册后保存“注册完成”消息并重定向到登录页面并显示消息,但消息永远不会被flash信使返回。

在控制器寄存器操作中:

$this->flashMessenger()->addMessage('Registration complete');
return $this->redirect()->toRoute('default', array('controller' => 'user', 'action' => 'login'));

在控制器登录操作中:

$flashMessenger = $this->flashMessenger();
$mes = $flashMessenger->hasMessages();
$cur = $flashMessenger->hasCurrentMessages();

$ mes和$ cur都是假的(我试过两个只是为了确定)。任何人都可以对此有所了解吗?

我正在使用ZF 2.2.2和PHP 5.3.14。会话保存处理程序正在使用dbtable适配器,我已尝试禁用此功能,并将flashmessenger会话管理器设置为使用相同的dbtable保存处理程序,但没有结果。

5 个答案:

答案 0 :(得分:7)

要使用FlashMessenger控制器插件,您需要在控制器中添加以下内容:

<?php 
class IndexController extends AbstractActionController {

  public function indexAction() {

    $this->flashMessenger()->addMessage('Your message');

    return $this->redirect()->toRoute('admin/default', array('controller'=>'index', 'action'=>'thankyou'));
  }

  public function thankyouAction() {

    return new ViewModel();
  }

}

将以下内容添加到thankyou.phtml视图模板中:

<?php 

if ($this->flashMessenger()->hasMessages()) {

    echo '<div class="alert alert-info">';

    $messages = $this->flashMessenger()->getMessages();
    foreach($messages as $message) {
        echo $message;
    }

    echo '</div>';
}

?>

答案 1 :(得分:2)

您的代码似乎应该是这样,工作流程中必定存在一些棘手的问题。

在这种情况下,您可以调试旧方式:尝试var_dump($_SESSION)以查看它是否由您的flashMessenger填充。

答案 2 :(得分:2)

使用

echo $this->flashMessenger()->renderCurrent(...

而不是

echo $this->flashMessenger()->render(...

答案 3 :(得分:0)

我也面临同样的问题(注册后登录flashmessage)我用以下方式解决了它

在布局页面上检查,如

<?php if($this->zfcUserIdentity()) {  ?> 
                        <div id="flashMessageDiv" class="hide">
                            <?php echo isset($flashMessages) && isset($flashMessages['0']) ? $flashMessages['0'] : ''; ?>
                        </div>
                    <?php } ?>

这意味着布局flashMessageDiv只能由登录用户访问。现在在你的登录视图文件(login.phtml) 应用以下代码

   <?php $pathArray = $_SERVER['HTTP_REFERER'];
            $pathArray = explode("/",$pathArray);
        ?>

       <?php if ($pathArray[4] === 'register') { ?>   
            <div id="flashMessageDiv" class="hide">
                <?php  echo "User details saved successfully"; ?>
            </div>
       <?php } ?>

在上面的代码中,我使用了HTTP_REFERER,它只是给我们引用url详细信息,检查referer url是否为register,然后显示falshmessage。

希望它会对你有所帮助。

答案 4 :(得分:-1)

FlashMessenger现在是ZF2中的官方视图助手,可以轻松集成到每个视图/布局中: FlashMessenger Helper — Zend Framework 2 2.3.1 documentation - Zend Framework

它也适用于TwitterBootstrap3,你的module.config.php有另一种配置。