在CodeIgniter中发送数据以及重定向

2022-08-30 15:58:30

我有一个简单的C(CRUD)函数,我想发送一条消息(错误或成功)以及我从我写的“插入”函数的重定向。有没有办法通过重定向来遵守POST字段?

在伪代码中,我有:

function view_all{
    //set up some initial variables
    $this->load->view(viewing_page, $data)
}

function insert{
    if ($this->db->insert(my_table, $_POST)){
        $message = "All's well";
    }
    else {
        $message = "whoops!";
    }
    redirect(view_all);
}

因此,理想情况下,viewing_page将具有如下内容

if (isset($message)){
    echo $message
}

因此,在第一次通过时,我没有看到任何消息,并且当/如果有插入时,它会弹出带有消息的同一页面。谢谢!


答案 1

我相信用途.如果是这样,我不相信你可以将数据与位置标头一起发送。您可以使用会话变量或(不太好)将查询字符串附加到位置 URL 来完成相同的操作。redirectheader()

对于在 CodeIgniter 中执行此操作的“已接受”方法,请查看会话类文档页面的一半多一点。

CodeIgniter 支持“闪存数据”,即仅可用于下一个服务器请求的会话数据,然后自动清除这些数据。这些可能非常有用,通常用于信息性或状态消息(例如:“已删除记录 2”)。

这个(现已删除 - 这是一个存档版本关于flash消息的帖子涵盖了查询字符串和会话var方法。

更新:为了总结现在删除的帖子,它显示了对消息进行url编码和附加为查询字符串(来自post的示例):

header('Location: http://www.example.com/index.php?message='.urlencode($message));

并使用两个框架设置“flash”变量(来自post的示例):

//Zend Framework
$flashMessenger = $this->_helper->FlashMessenger;
$flashMessenger->setNamespace('actionErrors');
$flashMessenger->addMessage($message);

//CakePHP
$this->Session->setFlash('Your post has been saved.');
$this->redirect('/news/index');

当然,你可以直接使用大致相同的事情(我的例子):$_SESSION

//first request
$_SESSION['flash'] = 'This is a simple flash message.';
//next request
$flash = $_SESSION['flash'];
unset($_SESSION['flash']); //flash is one time only

答案 2

您可以在 CI 会话类中使用 Flashdata。这是文档中所说的:

CodeIgniter 支持“闪存数据”,即仅可用于下一个服务器请求的会话数据,然后自动清除这些数据。这些可能非常有用,通常用于信息性或状态消息(例如:“已删除记录 2”)。

注意:Flash 变量以“flash_”开头,因此请避免在您自己的会话名称中使用此前缀。

要添加闪存数据:

$this->session->set_flashdata('item', 'value');

也可以采用与 相同的方式将数组传递给 。set_flashdata()set_userdata()

要读取闪存数据变量:

$this->session->flashdata('item');

如果发现需要通过其他请求保留 flashdata 变量,可以使用该函数执行此操作。keep_flashdata()

$this->session->keep_flashdata('item');

推荐