0

在我的控制器中使用$this->Session->setFlash('Some bog standard message.')时,闪存消息按预期正确显示。默认样式为红色,看起来像一个错误。在文档中,它说明了可以通过将字符串传递给$key参数来更改闪存消息的严重性。该文档使用“好”和“坏”,但将代码调整为以下内容时:

$this->Session->setFlash('A good message!', 'default', array(), 'good');

根本没有 Flash 消息,甚至没有默认的红色消息。我必须这样做才能获得预期的效果:

$this->Session->setFlash('A good message!', 'default', array('class' => 'message success'));

这是坏了还是我错过了什么?

4

2 回答 2

2

解释这本书如何引用你可以做到的:

如果你想改变颜色,你需要改变它们的样式。他们在书中引用的键只是向您展示了如何编写不同的 Flash 消息 - 它与消息的实际样式无关 - 只是将哪个写入位置:

//Controller
// set a bad message.
$this->Session->setFlash('Something bad.', 'default', array(), 'bad');

// set a good message.
$this->Session->setFlash('Something good.', 'default', array(), 'good');

// in a view.
echo $this->Session->flash('good');
echo $this->Session->flash('bad');

所以 - 如果你想设置不同的样式,你可以用 div 或其他东西包装“好”,并给它一个类,然后将其设置为不同的样式。发挥你的想象力 - 但关键是,键不会改变它的视觉风格,而是一个键引用它是/应该写哪个键。

我是怎么做的——使用一个元素和一个参数来改变视觉风格:

下面是我如何设置我的警报消息 - 这使用 Twitter Bootstrap 类和图标,根据我发送到我的“通知”元素的“类型”参数来改变警报的外观。当然,它可以根据您的需要进行编辑,但是您应该了解可以走的另一条路线。

$this->Session->setFlash(__('This is my success message'),
    'notifications', array('type'=>'success'));

$this->Session->setFlash(__('This is my failure message'),
    'notifications', array('type'=>'fail'));

//'notifications' element
<?php
$icon = 'icon-ok-sign';
if(!empty($type)) {
    switch($type) {
        case 'fail':
            $type='danger';
        case 'danger':
            $icon = 'icon-warning-sign';
            break;
        case 'info':
            $icon = 'icon-info';
            break;
        case 'success':
            $icon = 'icon-ok-sign';
            break;
        case 'error':
            $type = 'danger';
            $icon = 'icon-warning-sign';
            break;
    }
}

?>
<div class="alert alert-<?php echo $type ?>">
    <button type="button" class="close" data-dismiss="alert">×</button>
    <i class="<?php echo $icon ?>"></i> <?php echo $message; ?>
</div>
于 2013-10-21T13:09:01.543 回答
0

我个人为警报创建了一个视图元素,然后在我的setFlash()调用中传递了一个类名。

<!-- View/Elements/flash.ctp -->
<div class="alert alert-<?php echo $class; ?>">
  <p><?php echo $message; ?></p>
</div>

然后在您的控制器中设置您的闪存消息,如下所示:

public function add() {
    if ($this->request->is('post')) {
        if ($this->Model->save($this->request->data)) {
            $this->Session->setFlash('Lorem ipsum.', 'flash', array('class' => 'success'));
        }
    }
}
于 2013-10-21T13:14:36.533 回答