CodeIgniter 闪存数据
Posted
技术标签:
【中文标题】CodeIgniter 闪存数据【英文标题】:CodeIgniter Flash Data 【发布时间】:2012-09-03 10:03:15 【问题描述】:我正在为 CodeIgniter 中的 Flash 数据而苦苦挣扎。
我基本上想:
向数据库添加类别 将用户重定向回页面 显示成功弹出消息“您的类别已创建”
到目前为止,我可以成功地将类别添加到数据库中,并且正确验证了用户输入,唯一的问题是我不知道如何创建弹出成功消息。 (我不想加载成功视图),只需重定向回他们来自的地方并在顶角或其他地方显示小消息。
闪存数据是正确的方式吗?
【问题讨论】:
【参考方案1】:是的,只需检查闪存数据是否可用,如果是,则显示消息,如果不是,则不显示。就这么简单。
附言您应该始终在 POST 请求后进行重定向。
【讨论】:
你能解释一下为什么你应该总是在 POST 请求之后重定向吗?是取消设置会话数据吗? 防止重复提交表单的常见设计模式:en.wikipedia.org/wiki/Post/Redirect/Get【参考方案2】:在您的控制器中:
//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>
【讨论】:
干杯老兄!现在我可以用 css 和更多的 javascript 效果来整理它,谢谢! 刚注意到一些可能需要调整的东西。 php 调用的右大括号需要在文档就绪函数中。否则可能会报错。 $(document).ready(function() $('.confirm-div').hide(); session->flashdata('msg')) ?> $(' .confirm-div').html('session->flashdata('msg'); ?>').show(); ); @Le-Nerdtm 你是对的,我已经调整了上面的答案。【参考方案3】:CodeIgniter 的 Flash data 使用 PHP
session
变量。它在会话名称中放置一个:old
,以便它只持续一个数据库调用。它非常实用,目的是做你想做的事,所以,是的,这是处理这类事情的一种非常好的方法。
请记住,如果您要使用它,您必须包括
$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');
【讨论】:
【参考方案4】:使用三元运算符:
设置闪存数据:
$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;?>
【讨论】:
【参考方案5】:您可以执行不同的会话消息取决于您从控制器传递给视图的内容。注意到我使用 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
【讨论】:
【参考方案6】:你可以试试这个-
控制器:
$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 ?>
【讨论】:
【参考方案7】://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; ?>
【讨论】:
以上是关于CodeIgniter 闪存数据的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的 ReferenceError:$ 未定义 - Datepicker - Codeigniter 3
无法让 echo form_open 工作 - CodeIgniter
codeigniter 3 - 删除 index.php:Linux 上的错误 404,但在 Windows 上工作正常