首先:我正在尝试开发一个类或几个方法(或者只是一种方法),用于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 ...