我在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保存处理程序,但没有结果。
答案 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有另一种配置。