CI框架个人体会

接触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;
		}
	第一个项目写完之后,发现很多代码都是重复的,所以就给自己找了一个偷懒的借口,当然这个文件内的所有函数不一定适用于所有的项目,需要根据具体的情况
分出。
	如果有不对的地方,请大家帮忙指出,如果您有更好的偷懒方法,也请不吝赐教,如果有想要一起讨论的,请留言!~~~~~
 
 

你可能感兴趣的:(后台--CI)