接触CI已经快两年了,做过十多个项目,从第二个项目开始,开始独立设计项目架构,再开发的时候碰到了N多的坑,跟大家分享一下:
CI是一个MVC结构的框架,轻量级,而且有中英文文档。
但是在我使用过程中,我觉得model是一个坑:
在控制器中想要获取到数据库的数据,就需要调用相应的函数,读取数据,这个读取数据的函数,我一开始的写法:
$list = $this->index->getList($uid);//控制器中
public function getList($uid){
$this->db->select("*");
$this->db->from("user");
$this->db->where(array("id"=>$uid));
$list = $this->db->get();
if(!$list || $list->num_rows() < 1)
return false;
else
$list = $list->result_array();
return $list;
}
基本上在我每次想要获取数据的时候,我都需要在model中新建一个函数,后来我发现一个很有趣的东西,就是core文件夹,这个文件夹默认的文件MY_Controller.php,
这个文件相当于CI的控制器与我们创建的控制器之间的桥梁(当然,我们自己创建的控制器可以跳过这个),规则就是MY_Controller.php继承的是CI系统的控制器,我们创建的
控制器继承MY_Controller.php,所以我将所有的公共函数全部都放到MY_Controller.php中:
public function del($table,$where){
if($this->db->delete($table,$where))
return true;
else
return false;
}
public function _getCount($table,$where=''){
$this->db->select("id");
$this->db->from($table);
if ($where)
$this->db->where($where);
$list = $this->db->get();
if (!$list || $list->num_rows() < 1)
return 0;
else
return $list->num_rows();
}
public function update($table,$data,$where){
$this->db->where($where);
if ($this->db->update($table,$data))
return true;
else
return false;
}
/**
* Enter description here...
*
* @param unknown_type $table
* @param unknown_type $where
* @param unknown_type $file
* @return 需要查询的单个字段
*/
public function _getF($table,$where='',$file){
$this->db->select('*');
$this->db->from($table);
if ($where)
$this->db->where($where);
$list = $this->db->get();
if (!$list || $list->num_rows() < 1)
return false;
else
$list = $list->result_array();
return $list['0']["$file"];
}
/**
* Enter description here...
*
* @param unknown_type $table
* @param unknown_type $where
* @param unknown_type $order
* @return 需要查询的一行数据
*/
public function _getR($table,$where=''){
$this->db->select('*');
$this->db->from($table);
if ($where)
$this->db->where($where);
$list = $this->db->get();
if (!$list || $list->num_rows() < 1)
return false;
else
$list = $list->result_array();
return $list['0'];
}
/**
* Enter description here...
*
* @param unknown_type $table
* @param unknown_type $where
* @param unknown_type $order
* @return 需要查询的数组
*/
public function _getA($table,$where='',$order=''){
$this->db->select('*');
$this->db->from($table);
if ($where)
$this->db->where($where);
if ($order)
$this->db->order_by("$order",'desc');
else
$this->db->order_by('id','desc');
$list = $this->db->get();
if (!$list || $list->num_rows() < 1)
return false;
else
return $list->result_array();
}
//这个是AJAX实现分页的函数
public function _getArrayLimtLineVideo($table,$where='',$order='',$per,$limit){
$this->db->select('id,image,Title,URL');
$this->db->from($table);
if ($where)
$this->db->where($where);
if ($order)
$this->db->order_by("$order",'desc');
else
$this->db->order_by('id','desc');
$this->db->limit($per,$limit);
$list = $this->db->get();
if (!$list || $list->num_rows() < 1)
return false;
else
return $list->result_array();
}
//这个是AJAX实现分页的函数
public function _getArrayLimtLine($table,$where='',$order='',$per,$limit){
$this->db->select('id,image,Title,URL');
$this->db->from($table);
if ($where)
$this->db->where($where);
if ($order)
$this->db->order_by("$order",'desc');
else
$this->db->order_by('id','desc');
$this->db->limit($per,$limit);
$list = $this->db->get();
if (!$list || $list->num_rows() < 1)
return false;
else
return $list->result_array();
}
//这个是AJAX实现分页的函数
public function _getArrayLimt($table,$where='',$order='',$limit){
$this->db->select('*');
$this->db->from($table);
if ($where)
$this->db->where($where);
if ($order)
$this->db->order_by("$order",'desc');
else
$this->db->order_by('id','desc');
$this->db->limit(6,$limit);
$list = $this->db->get();
if (!$list || $list->num_rows() < 1)
return false;
else
return $list->result_array();
}
//打印数据的函数
public function print_echo($town){
echo '
';
print_r($town);
echo '
';
}
/**
* Enter description here...
*
* @param unknown_type $ip
* @return 获取当前用户登录的IP地址
*/
public function getIpInfo($ip){
$this->db->select('id');
$this->db->from('ip');
$this->db->where(array('IP'=>$ip));
$list = $this->db->get();
if (!$list || $list->num_rows() < 1){
return false;
} else {
$list = $list->result_array();
return $list['0'];
}
}
/**
* Enter description here...
*
* @return 获取当前用户登录的IP地址
*/
//这个是在网上找的函数
public function getIp(){
$onlineip='';
if(getenv('HTTP_CLIENT_IP')&&strcasecmp(getenv('HTTP_CLIENT_IP'),'unknown')){
$onlineip=getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')&&strcasecmp(getenv('HTTP_X_FORWARDED_FOR'),'unknown')){
$onlineip=getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')&&strcasecmp(getenv('REMOTE_ADDR'),'unknown')){
$onlineip=getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')){
$onlineip=$_SERVER['REMOTE_ADDR'];
}
return $onlineip;
// echo '{"ip":'.$onlineip.'}';
}
//php5.3和php5.5不同版本使用不同的json转换函数
//这个是PHP5.5以上版本
public function arrayToJson($arr){
$json = "";
foreach ($arr as $value){
$json .= json_encode($value).',';
}
return '[' . substr($json,0,strlen($json) -1) .']';
}
//这个是5.3的版本
public function arrToJson($arr){
$json = json_encode($arr,JSON_UNESCAPED_UNICODE);
$json = str_replace("\\/", "/", $json);
return $json;
}
/**
* Enter description here...
*
* @param unknown_type $table
* @param unknown_type $data
* @return 添加并且返回id值
*/
public function add($table,$data){
if ($this->db->insert($table,$data))
return mysql_insert_id();
else
return false;
}
第一个项目写完之后,发现很多代码都是重复的,所以就给自己找了一个偷懒的借口,当然这个文件内的所有函数不一定适用于所有的项目,需要根据具体的情况
分出。
如果有不对的地方,请大家帮忙指出,如果您有更好的偷懒方法,也请不吝赐教,如果有想要一起讨论的,请留言!~~~~~