在CodeIgniter中发送数据和重定向

Ale*_*Mcp 27 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);
}
Run Code Online (Sandbox Code Playgroud)

所以view_page理想上会有类似的东西

if (isset($message)){
    echo $message
}
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*tle 33

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

对于在CodeIgniter中执行此操作的"接受"方式,请查看会话类文档页面的一半以上.

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

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

更新:为了总结现在删除的帖子,它显示了对邮件进行urlencoding并附加为查询字符串(来自帖子的示例):

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

并使用两个框架设置'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');
Run Code Online (Sandbox Code Playgroud)

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

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


Sha*_*lin 27

您可以在CI 会话类中使用Flashdata .这就是文件中所说的:

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

注意:Flash变量的前缀为"flash_",因此请在您自己的会话名称中避免使用此前缀.

要添加flashdata:

$this->session->set_flashdata('item', 'value');
Run Code Online (Sandbox Code Playgroud)

您也可以按照与之set_flashdata()相同的方式传递数组set_userdata().

要读取flashdata变量:

$this->session->flashdata('item');
Run Code Online (Sandbox Code Playgroud)

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

$this->session->keep_flashdata('item');
Run Code Online (Sandbox Code Playgroud)