-1

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

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

<?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);
    }
}
?>

这是我将其转换为使用 codeigniter 会话的微不足道的尝试

<?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);
}

抱歉英语不好,不是母语人士

4

1 回答 1

0

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

如果您只需要准备一些消息,显示然后立即销毁它,flashdata可能适合。

如果您需要创建自己的自定义类,只需查看以下内容:http ://ellislab.com/codeigniter/user-guide/general/creating_libraries.html ,其中最重要的是获取 codeigniter 实例的方法:

$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 ...
于 2013-07-27T17:37:39.613 回答