在CodeIgniter中发送数据和重定向

时间:2009-12-03 03:34:46

标签: php codeigniter

我有一个简单的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
}

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

3 个答案:

答案 0 :(得分:33)

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

对于在CodeIgniter中执行此操作的“已接受”方式,请查看session class文档页面的一半以上。

  

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

此(现已删除 - 此处为archived versionpost on flash messages涵盖查询字符串和会话var方法。

更新:要总结现已删除的帖子,它会显示urlencoding一条消息并附加为查询字符串(示例来自帖子):

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

答案 1 :(得分:27)

您可以在CI Session Class中使用Flashdata。这就是文件中所说的:

  

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

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

添加flashdata:

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

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

要读取flashdata变量:

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

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

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

答案 2 :(得分:0)

我想指出CodeIgniter在注销时会破坏当前会话。这使得传递消息更加困难,因为您无法使用闪存或会话存储,因此沿着“您已登录/退出”的方式传递消息。如果您需要在登录和退出状态之间转换时传递消息,我建议使用memcached。其他选项(如上所述)为using URL query stringssetting cookies