使用代码点火器会话,如超级全局到


Using codeigniter sessions like a superglobal to

首先:我正在尝试开发一个类或几个方法(或者只是一种方法),用于codeigniter,这是通用的、简单的和灵活的,我需要一种方法来向它传递消息,在项目中的任何地方显示,然后删除它。(如果是ajax,那就太棒了)

在我没有使用codeigniter的时候,我曾经有一个类,在会话中插入消息,一个非常简单的类,这样我就可以显示成功消息等等。这是我想给codeigniter带来的类,但我几乎可以肯定codeigniters有类似的解决方案,但我不知道该搜索什么。我也希望我的解决方案比这个更好,因为我试图适应代码点火器处理会话的方式,但没有起到的作用

<?php
class Basic
{
    protected $erros;
    function __construct()
    {
        session_start();
        if(!empty($_SESSION['erro']))   // Session não vazia (tem uma array dentro dela ent?o)
        {
            $this->erros = $_SESSION['erro'];
        }else                           // Session VAZIA (tem que COLOCAR uma array dentro dela)
        {
            $this->erros = array();
            $_SESSION['erro']  = $this->erros;
        }
    }
    private function destruct()
    {
        unset($_SESSION['erro']);
        unset($this->erros);
        $this->erros = NULL;
    }
    private function add($string)
    {
        $this->erros      = $_SESSION['erro'];  // pega mais um
        $this->erros[]    = $string;            // adiciona no array
        $_SESSION['erro'] = $this->erros;               // coloca de volta na session
    }
    public function add_error($data)
    {
        if(empty($data))return true;
        if(is_array($data))
        {
            foreach ($data as $value)
            {
                $this->add($value);
            }
        }
        else
        {
            $this->add($data);
        }
    }
    public function return_errors()
    {
        $erros = $this->erros;
        $this->destruct();
        return $erros;
    }
    public function check_ok()
    {
        return ($this->erros == NULL)?true:false;
    }
    public function show_errors()
    {
        $erros = $this->erros;
        print_r($erros);
    }
}
?>

这是我尝试将其转换为使用代码点火器会话

<?php
function __construct()
{
    if(!empty($this->session->userdata('my_msgs'))) // Session n?o vazia (tem uma array dentro dela ent?o)
    {
        $this->msg = $this->session->userdata('my_msgs');
    }else                           // Session VAZIA (tem que COLOCAR uma array dentro dela)
    {
        $this->msg = array();
        $this->session->set_userdata('my_msgs', $this->msg);
    }
}
function destruct()
{
    $this->session->unset_userdata('my_msgs');
    $this->msg = NULL;
    unset($this->msg);
}
function add($string)
{
    $this->msg      = $this->session->userdata('my_msgs');      // pega mais um
    $this->msg[]    = $string;                                  // adiciona no array
    $this->session->set_userdata('my_msgs', $this->msg);        // coloca de volta na session
}
function add_msg($data)
{
    if(empty($data))return true;
    if(is_array($data))
    {
        foreach ($data as $value)
        {
            $this->add($value);
        }
    }
    else
    {
        $this->add($data);
    }
}
function return_msg($keep = FALSE)
{
    $msg = $this->msg;
    if($keep == FALSE)
    {
        $this->destruct();
    }
    return $msg;
}
function check_ok()
{
    return ($this->msg == NULL)?true:false;
}
function show_msgs()
{
    $msg = $this->msg;
    print_r($msg);
}

抱歉英语不好,不是以为母语的人

请注意,您以前的代码使用的是本机会话驱动程序(session_start()),而codeigniter使用的是cookies

如果你只需要准备一些信息,显示然后立即销毁,flashdata可能会很合适。

如果您需要创建自己的自定义类,请查看以下内容:http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html,其中最重要的是一种获得代码点火器实例的方法:

$var =& get_instance();

结束,现在你可以在课堂上使用CI会话:

$var->session->set_userdata('something');

你的课程可能看起来像:

<?php
 class Your_class {
    function __construct() 
    {
        $CI =& get_instance(); //get CI instance
        if( ! $CI->session->userdata('my_msgs'))
        {
             $this->msg = $CI->session->userdata('my_msgs');
        } else {
             $this->msg = array();
             $CI->session->set_userdata('my_msgs', $this->msg);
        }
     }
     //and soon ...