我正在为 CodeIgniter 中的 Flash 数据而苦苦挣扎。
我基本上想:
向数据库添加类别 将用户重定向回页面 显示成功弹出消息“您的类别已创建”
到目前为止,我可以成功地将类别添加到数据库并且用户输入得到正确验证,唯一的事情是我不知道如何创建弹出成功消息。(我不想加载成功视图),只需重定向回他们来自的地方并在顶角或其他地方显示小消息。
闪存数据是正确的方法吗?
我正在为 CodeIgniter 中的 Flash 数据而苦苦挣扎。
我基本上想:
向数据库添加类别 将用户重定向回页面 显示成功弹出消息“您的类别已创建”
到目前为止,我可以成功地将类别添加到数据库并且用户输入得到正确验证,唯一的事情是我不知道如何创建弹出成功消息。(我不想加载成功视图),只需重定向回他们来自的地方并在顶角或其他地方显示小消息。
闪存数据是正确的方法吗?
在您的控制器中:
//add to db
// load session library if not auto-loaded
$this->session->set_flashdata('msg', 'Category added');
redirect('controller/method');
在视图中:
<script>
// assumes you're using jQuery
$(document).ready(function() {
$('.confirm-div').hide();
<?php if($this->session->flashdata('msg')){ ?>
$('.confirm-div').html('<?php echo $this->session->flashdata('msg'); ?>').show();
<?php } ?>
});
</script>
您可以执行不同的会话消息取决于您从控制器传递给视图的内容。注意到我使用 Bootstrap 作为我的 CSS 主干。
鉴于,
对于成功案例,
<?php if ($this->session->flashdata('category_success')) { ?>
<div class="alert alert-success"> <?= $this->session->flashdata('category_success') ?> </div>
<?php } ?>
对于错误情况,
<?php if ($this->session->flashdata('category_error')) { ?>
<div class="alert alert-danger"> <?= $this->session->flashdata('category_error') ?> </div>
<?php } ?>
在控制器中,
对于成功案例,
$this->session->set_flashdata('category_success', 'Success message.');
redirect("To your view");
对于错误情况,
$this->session->set_flashdata('category_error', 'Error message.');
redirect("To your view");
如需更多参考,您可以访问: http: //www.codeigniter.com/userguide2/libraries/sessions.html
使用三元运算符:
设置闪存数据:
$this->session->set_flashdata('insertproduct', 'Product added successfully');
$this->session->set_flashdata('deleteproduct','Delete added successfully');
使用 Flash 会话数据:
<?php if($this->session->flashdata('insertproduct')):echo $this->session->flashdata('insert');endif; ?><br/>
<?php if($this->session->flashdata('delete')): echo $this->session->flashdata('delete'); endif;?>
你可以试试这个——
控制器:
$this->session->set_flashdata('success', 'Success Message...');
OR
$this->session->set_flashdata('error', 'Error Message...');
OR
$this->session->set_flashdata('warning', 'Warning Message...');
OR
$this->session->set_flashdata('info', 'Info Message...');
看法:
<?php if($this->session->flashdata('success')){ ?>
<div class="alert alert-success">
<a href="#" class="close" data-dismiss="alert">×</a>
<strong>Success!</strong> <?php echo $this->session->flashdata('success'); ?>
</div>
<?php } else if($this->session->flashdata('error')){ ?>
<div class="alert alert-danger">
<a href="#" class="close" data-dismiss="alert">×</a>
<strong>Error!</strong> <?php echo $this->session->flashdata('error'); ?>
</div>
<?php } else if($this->session->flashdata('warning')){ ?>
<div class="alert alert-warning">
<a href="#" class="close" data-dismiss="alert">×</a>
<strong>Warning!</strong> <?php echo $this->session->flashdata('warning'); ?>
</div>
<?php } else if($this->session->flashdata('info')){ ?>
<div class="alert alert-info">
<a href="#" class="close" data-dismiss="alert">×</a>
<strong>Info!</strong> <?php echo $this->session->flashdata('info'); ?>
</div>
<?php } ?>
是的,只需检查闪存数据是否可用,如果是,则显示消息,如果不是,则不显示。就如此容易。
ps 你应该总是在 POST 请求之后进行重定向。
CodeIgniter 的Flash 数据使用PHP
session
变量。它将 a:old
放在会话名称中,以便它只持续一个 db 调用。它的功能和目的是做你想做的事,所以,是的,这是处理这些类型事情的好方法。
请记住,如果您要使用它,您必须包括
$this->session->library('session')
如果您不确定如何实际使用flash_data
,我建议您阅读我之前链接的文档。
$this->session->set_flashdata(
'category_success',
'Your category has been created'
);
redirect(); //location
echo $this->session->flashdata('category_success');
//Set Flash messages
$this->session->set_flashdata('post_created', 'Your post has been Posted!');
redirect('Posts/index');
//In Posts View you will have
<?php if($this->session->flashdata('post_created')) : ?>
<?php echo '<p class="alert alert-success"> ' .$this->session->flashdata('post_created'). '</p>'; ?>
<?php endif; ?>