1

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

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

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

4

2 回答 2

1

我认为您的布局中可能有剩余内容

$session->flash();

所以闪光灯在那里渲染并清除。这就是为什么它没有在您的元素中呈现的原因。

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

于 2009-04-29T09:53:26.240 回答
1

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

$this->Session->setFlash(__('My Message Here', TRUE));

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

于 2011-02-14T02:05:43.917 回答