19

我正在为 CodeIgniter 中的 Flash 数据而苦苦挣扎。

我基本上想:

向数据库添加类别 将用户重定向回页面 显示成功弹出消息“您的类别已创建”

到目前为止,我可以成功地将类别添加到数据库并且用户输入得到正确验证,唯一的事情是我不知道如何创建弹出成功消息。(我不想加载成功视图),只需重定向回他们来自的地方并在顶角或其他地方显示小消息。

闪存数据是正确的方法吗?

4

7 回答 7

44

在您的控制器中:

//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>
于 2012-09-10T14:11:31.167 回答
6

您可以执行不同的会话消息取决于您从控制器传递给视图的内容。注意到我使用 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

于 2015-04-22T06:45:21.737 回答
1

使用三元运算符:

设置闪存数据:

$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;?>
于 2013-11-14T10:11:14.870 回答
1

你可以试试这个——

控制器:

    $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 } ?>
于 2017-03-17T05:18:49.487 回答
0

是的,只需检查闪存数据是否可用,如果是,则显示消息,如果不是,则不显示。就如此容易。

ps 你应该总是在 POST 请求之后进行重定向。

于 2012-09-10T14:10:57.097 回答
0

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');
于 2012-09-10T14:15:28.000 回答
0
//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; ?>
于 2019-02-03T17:50:16.807 回答