在我的控制器中使用$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'));
}
}
}