我正在使用CakePHP 1.2版(最新版)编写一个简单的Web应用程序,并且遇到了显示来自Session帮助程序的flash消息的问题。在我的布局中,存在以下代码:
<?php echo $this->renderElement('flash'); ?>
其中包含以下元素:
<?php if($session->check('Message.flash')): ?>
<?php $class = isset($error) ? 'contentError' : 'contentSuccess'; ?>
<div class="contentBlockWrapper <?php echo $class; ?>">
<div class="contentBlock">
<div id="flashMessage" class="flash">
<?php $session->flash(); ?>
</div>
</div>
</div>
<?php endif; ?>
理想的行为是,如果有要显示的flash消息,它将显示在DOM中的上述位置,以便按照我的意愿进行样式设置和定位。
问题是,如果有flash消息,CakePHP会在打开<body>
标记后立即呈现它。现在,它还将上述容器呈现在正确的位置,但根本不会将文本写入我想要的位置。
我已经尝试将输出缓冲区刷新到我视图中的变量中并回显它,但无济于事。我还读到有些人尝试使用命名键来指示他们想要显示的特定消息,但这不合适,因为我要显示的文本正在显示,只是在错误的位置。
任何帮助都将不胜感激 - 谢谢!
答案 0 :(得分:1)
我认为你的布局中可能有一个剩余部分
$session->flash();
因此闪存在那里渲染并清除。这就是为什么它不会在你的元素中呈现。
检查您的~/app/views/layouts/default.ctp
(或其他如果您没有使用默认设置)并告知我们是否有帮助。
答案 1 :(得分:1)
确保如果在控制器中调用setFlash()时使用了translation函数,则将“true”作为第二个参数传递给它。像这样:
$ this-&gt;会话 - &gt; setFlash(__('我在这里留言',TRUE));
否则,消息将被回显,而不是返回!您只会在页面的HTML代码中看到它,并且发送到setFlash的消息将是未定义的,因此不会显示在您期望的位置。