5

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

在控制器注册动作中:

$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 保存处理程序,但没有结果。

4

5 回答 5

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>';
}

?>
于 2014-02-05T02:32:47.637 回答
3

看起来你的代码应该是这样的,工作流程中一定有一些棘手的地方。

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

于 2014-02-06T15:37:10.170 回答
2

利用

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

代替

echo $this->flashMessenger()->render(...
于 2014-07-18T16:03:45.020 回答
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 详细信息,检查引用 URL 是否已注册,然后显示 falshmessage。

希望它会帮助你。

于 2014-06-05T14:17:53.943 回答
-1

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

它也适用于 TwitterBootstrap3,并且您的 module.config.php 有一个替代配置。

于 2014-04-24T12:39:32.650 回答