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-&gt;session-&gt;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">&times;</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">&times;</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">&times;</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">&times;</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 闪存数据的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 3 会话在页面刷新后销毁

重复的 SQL 导致 JOIN - Codeigniter

未捕获的 ReferenceError:$ 未定义 - Datepicker - Codeigniter 3

无法让 echo form_open 工作 - CodeIgniter

codeigniter 3 - 删除 index.php:Linux 上的错误 404,但在 Windows 上工作正常

NetApp 全闪存数据存储阵列 AFF A 系列:智能、至强、至信