CakePHP setFlash() 严重性('好'/'坏')不起作用


CakePHP setFlash() severity ('good'/'bad') not working?

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

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

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

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

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

解释本书

如何参考你可以做到这一点:

如果要更改颜色,则需要以不同的方式设置它们的样式。 他们在书中引用的密钥只是向您展示如何编写不同的 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>

我个人为警报创建了一个视图元素,然后在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'));
        }
    }
}