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

时间:2013-10-21 12:30:45

标签: php cakephp

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

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

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

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

这是破了还是我遗失了什么?

2 个答案:

答案 0 :(得分: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或者东西包装“good”并给它一个类,然后用不同的方式设置它。使用你的想象力 - 但重点是,关键不会改变它的视觉风格,而是一个关键引用它/应该写的关键词。

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

以下是我设置警报消息的方法 - 它使用Twitter Bootstrap类和图标,根据我发送给“notifications”元素的'type'参数,它会改变警报的外观。当然,它可以根据您的需求进行编辑,但您应该了解另一条路线。

$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>

答案 1 :(得分:0)

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

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

然后按如下方式在控制器中设置Flash消息:

public function add() {
    if ($this->request->is('post')) {
        if ($this->Model->save($this->request->data)) {
            $this->Session->setFlash('Lorem ipsum.', 'flash', array('class' => 'success'));
        }
    }
}