在我的控制器中使用$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'));
这是破了还是我遗失了什么?
答案 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'));
}
}
}