在CakePHP 1.2中自定义$ session-> flash输出的样式和位置

时间:2009-04-28 13:21:26

标签: php cakephp cakephp-1.2

我正在使用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>标记后立即呈现它。现在,它还将上述容器呈现在正确的位置,但根本不会将文本写入我想要的位置。

我已经尝试将输出缓冲区刷新到我视图中的变量中并回显它,但无济于事。我还读到有些人尝试使用命名键来指示他们想要显示的特定消息,但这不合适,因为我要显示的文本正在显示,只是在错误的位置。

任何帮助都将不胜感激 - 谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你的布局中可能有一个剩余部分

$session->flash();

因此闪存在那里渲染并清除。这就是为什么它不会在你的元素中呈现。

检查您的~/app/views/layouts/default.ctp(或其他如果您没有使用默认设置)并告知我们是否有帮助。

答案 1 :(得分:1)

确保如果在控制器中调用setFlash()时使用了translation函数,则将“true”作为第二个参数传递给它。像这样:

$ this-&gt;会话 - &gt; setFlash(__('我在这里留言',TRUE));

否则,消息将被回显,而不是返回!您只会在页面的HTML代码中看到它,并且发送到setFlash的消息将是未定义的,因此不会显示在您期望的位置。