**【ci框架】精通CodeIgniter框架
http://blog.csdn.net/yanhui_wei/article/details/25803945
一、大纲
- 1、codeigniter框架的授课内容安排
- 2、codeigniter框架的简介
- |-----关于框架的概念
- |-----使用CI框架的好处
- |-----为什么选择CI框架
- 3、codeigniter框架的具体安装步骤
- |-----官网下载:http://www.codeigniter.com/
- |-----httpd.conf配置文件中rewrite重写机制的开启
- |-----httpd.conf配置文件虚拟主机的开启
- |-----httpd-vhosts.conf配置文件中虚拟主机的配置
- |-----hosts文件中添加DNS映射
- 4、codeigniter框架的目录结构分析
- |-----框架目录结构分析
- |-----项目部署
- 5、codeigniter框架中URL各部分的分析及简单的工作原理:http://域名/入口文件/模块名/控制器/方法/参数列表
- 6、codeigniter框架详细执行流程分析:如果没有模块文件夹的话,则为:http://域名/入口文件/控制器/方法/参数列表
- 7、codeigniter框架中config.php配置文件的分析
- 8、codeigniter框架中使用rewrite重写机制隐藏index.php单一入口文件
- 9、codeigniter框架中控制器
- |-----控制器的创建位置
- |-----控制器的命名规范
- |-----控制器文件的分目录管理
- |-----方法的命名规范:1、不能以list命名 2、方法名与类名不同名
- |-----方法中如何获取GET方式提交过来的数据,如:$username = $this->input->get_post('username', true);//获取post或get方式提交过来的数据
- |-----方法中如何获取POST方式提交过来的数据,如:$username = $this->input->post('username', true);$username = $this->input->get_post('username', true);
- 10、codeigniter框架中视图
- |-----视图的创建位置:appcation/views/ 目录下
- |-----视图的命名规范:login.php login.html
- |-----如何在控制器中载入视图模板文件:$this->load->view("login"); $this->load->view("login.html");
- |-----如何在控制器中给视图模板文件传递数据:$this->load->view("login.html",$data);//extract函数
- |-----视图模板文件的分目录管理:$this->load->view("admin/category/addcategory.html");
- 11、codeigniter框架中的模型
- |-----模型的创建位置:application/models 目录下
- |-----模型的命名规范:不区分大小写,建议首字母大写
- |-----如何在控制器中载入模型(自动加载和手动加载):$this->load->model("user_model");
- |-----模型文件的分目录管理:$this->load->model("admin/user_model");
- 12、codeigniter框架中如何扩展控制器、模型
- |-----基控制器的扩展:class Common extends CI_Controller{}
- |-----基模型的扩展:class Model extends CI_Model{}
- 13、codeigniter框架中数据库操作
- |-----连接mysql数据库的配置:application/config/database.php
- |-----如何在模型中连接mysql数据库(自动载入和手动载入):$this->load->database();
- |-----使用普通查询操作完整数据的增删改查操作:1、$this->db->query($query);//结果集
- |-----使用快捷操作类完成数据的增删改查操作:将sql语句的拼接放在成员方法中进行
- |-----用户管理系统-管理员的查询
- |-----用户管理系统-管理员的添加
- |-----用户管理系统-管理员的修改
- |-----用户管理系统-管理员的删除
- 14、codeigniter框架中辅助函数
- |-----辅助函数的位置:application/helpers 目录 或 system/helpers 目录
- |-----如何在控制器中载入辅助函数:$this->load->helper("url");//载入url_helper.php文件
- |-----自定义辅助函数
- |-----辅助函数的扩展
- |-----辅助函数的载入机制:首先考虑载入application/helpers 目录下的文件,再考虑载入system/helpers 目录下的文件
- |-----用户管理系统-页面的跳转:header("location:".site_url("admin/login/"));//创建一个url,并跳转
- 15、codeigniter框架中的配置文件
- |-----配置文件的位置:application/config/ 目录下
- |-----如何在CI项目的控制器中载入配置文件(手动载入和自动载入):$this->config->load("pagination");
- |-----如何自定义配置文件:application/config/pagination.php 配置项变量名必须是 $config['配置项']
- |-----配置文件中配置项的命名规范:$config['配置项']
- |-----如何动态给配置项设置值:$this->config->set_item("配置项","配置项值");
- |-----如何将分页配置写到配置文件中
- |-----如何将配置文件合并:$this->config->load("pagination",true);//参数2:true
- 16、codeigniter框架中的通用类库
- |-----通用类库的位置:application/libraries/ 目录 system/libraries/ 目录
- |-----如何在ci项目的控制器中载入通用类库:$this->load->library("upload");//文件上传类库的载入
- |-----通用类库的载入机制:优先考虑载入application/libraries/ 目录下类库,其次考虑载入 system/libraries 目录下类库
- |-----分页类库的载入(定制分页风格):$this->load->library("pagination");
- |-----用户管理系统-管理员列表页分页功能的完成
- 17、codeigniter框架与smarty模板引擎的无缝整合
- |-----如何将第三方类库:smarty模板引擎整合到CI项目中来
- |-----如何在控制器中载入smarty模板引擎:$this->load->library("tp");
- 18、codeigniter框架中完成用户登录系统
- |-----用户登录系统-session类库的使用
- |-----用户登录系统-cookie类库的使用
- |-----用户登录系统-使用captache辅助函数完成图像验证码的创建
- |-----用户登录系统-验证码原理
- |-----用户登录系统-session登录
- |-----用户登录系统-cookie登录
- |-----用户登录系统-增加公共操作控制器(扩展系统核心控制器类文件)
- |-----用户登录系统-cookie的三种使用方式
- |-----php原生态语法结构中设置cookie的函数
- |-----ci框架的cookie辅助函数
- |-----input类库
- 19、codeigniter框架与ueditor编辑器的无缝整合
- |-----整合步骤
- 20、codeigniter框架与fckeditor编辑器的无缝整合
- |-----整合步骤
- 21、codeigniter框架中完成无限级分类下拉菜单
- |-----无线递归方式完成(比较复杂一点,效率低,不推荐使用)
- |-----path方式完成(最为简便的方式,几行代码就可搞定)
- 22、codeigniter框架中使用jquery完成省市区三级联动功能
- 23、codeigniter框架中完成商品分类管理模块
- |-----商品分类管理模块-添加商品分类
- |-----商品分类管理模块-添加商品子分类
- |-----商品分类管理模块-修改商品分类
- |-----商品分类管理模块-商品分类列表
- |-----商品分类管理模块-商品分类的删除
- |-----商品分类管理模块-商品分类排序
- |-----文件上传类库的使用
- |-----图像处理类库的使用
- |-----商品分类管理模块-添加分类banner
- |-----如何将文件上传和图像处理的有关配置放到配置文件中
- |-----商品分类管理模块-分类banner列表
- |-----商品分类管理模块-编辑分类banner
- |-----商品分类管理模块-banner的启用和禁用
- |-----商品分类管理模块-分类banner排序
- 24、codeigniter框架完成一个权限管理系统
- |-----权限管理系统-数据表的创建
- |-----权限管理系统-业务分析
- |-----权限管理系统-操作权限管理
- |-----权限管理系统-添加操作权限
- |-----权限管理系统-修改操作权限
- |-----权限管理系统-删除操作权限
- |-----权限管理系统-模块管理
- |-----权限管理系统-添加模块
- |-----权限管理系统-修改模块
- |-----权限管理系统-删除模块
- |-----权限管理系统-角色管理
- |-----权限管理系统-添加角色并为角色设置权限
- |-----权限管理系统-为当前角色添加操作权限
- |-----权限管理系统-为当前角色删除操作权限
- |-----权限管理系统-修改角色
- |-----权限管理系统-删除角色
- |-----权限管理系统-添加管理员的同时为管理员设置多个角色
- |-----权限管理系统-添加管理员角色
- |-----权限管理系统-修改管理员角色
- |-----权限管理系统-删除管理员角色
- |-----权限管理系统-当前管理员角色列表
- 25、显示最后一条查询的sql语句:主要用于在连贯操作时,检测拼接的sql语句是否正确
- echo $this->db->last_query();//如:select * from pt_users where uid>10 order by datetime desc limit 0,10
- 26、CI_DB_pdo_driver PDO数据库驱动类
- $this->db->affected_rows();//影响记录数,区分:$this->db->get("order_master")->num_rows();//获取到的结果集行数
- $this->db->count_all("order_master");//对于某个表不带条件的查询
- $this->db->count_all_results();//快捷操作类方法,适用于带条件的查询
- $this->db->insert_id();//新插入记录的id
- $this->db->trans_enabled = true;//开启事务(默认是false,所以在使用事务前必须将其赋值为true)
- $this->db->trans_begin();//开始事务
- $this->db->trans_rollback();//事务回滚
- $this->db->trans_commit();//提交事务
- $this->db->trans_status();//事务状态 true 或 false CI_DB_driver驱动类中的方法
- 27、CI_DB_mysql_driver mysql数据库驱动类
- $this->db->affected_rows();//影响记录数,区分:$this->db->get("order_master")->num_rows();//获取到的结果集行数
- $this->db->count_all("order_master");//对于某个表不带条件的查询
- $this->db->count_all_results();//快捷操作类方法,适用于带条件的查询
- $this->db->insert_id();//新插入记录的id
- $this->db->trans_enabled = true;//开启事务(默认是false,所以在使用事务前必须将其赋值为true)
- $this->db->trans_begin();//开始事务
- $this->db->trans_rollback();//事务回滚
- $this->db->trans_commit();//提交事务
- $this->db->trans_status();//事务状态 true 或 false CI_DB_driver驱动类中的方法
- 28、CI_DB_mysqli_driver mysqli数据库驱动类
- $this->db->affected_rows();//影响记录数,区分:$this->db->get("order_master")->num_rows();//获取到的结果集行数
- $this->db->count_all("order_master");//对于某个表不带条件的查询
- $this->db->count_all_results();//快捷操作类方法,适用于带条件的查询
- $this->db->insert_id();//新插入记录的id
- $this->db->trans_enabled = true;//开启事务(默认是false,所以在使用事务前必须将其赋值为true)
- $this->db->trans_begin();//开始事务
- $this->db->trans_rollback();//事务回滚
- $this->db->trans_commit();//提交事务
- $this->db->trans_status();//事务状态 true 或 false CI_DB_driver驱动类中的方法
- 29、model模型类中引用其它model模型类(如:category_model)和数据库(如:product)
- public function __construct() {
- parent::__construct();
- $this->product_db = $this->load->database('product', true);//通过model基类中的__get()方法选择性的引入CI超级对象中已加载类库,如:"load"
- $this->load->model('category_model');
- }
- 30、控制器中引用其它模型类(如:category_model)和数据库(如:product)
- public function __construct() {
- parent::__construct();
- $this->product_db = $this->load->database('product', true);
- $this->load->model('category_model');
- }
- 31、helper函数中引用CI超级对象的方法
- function get_order_status_by_order($order_status){
- $CI =& get_instance();//获取CI超级对象
- $CI->load->Model('order_model');//通过CI超级对象可以载入任何模型
- }
- 32、缓存驱动的加载方式
- $this->load->driver('cache', array('adapter' => 'memcached'));//加载缓存驱动或缓存适配器,当前为memcached缓存;注意:CI框架只支持memcached,不支持memcache,windows操作系统下只有memcache扩展
- $this->load->driver('cache', array('adapter' => 'file'));//加载缓存驱动或缓存适配器,当前为file缓存
- $this->load->driver('cache', array('adapter' => 'redis'));//加载缓存驱动或缓存适配器,当前为redis缓存
- $this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));//优先选择apc缓存,file文件缓存作为替代方案;如果服务器不支持apc缓存时,选择file文件缓存
- 33、静态html模板文件中如何动态加载区域块内容
- //index.html文件
- <div include="/index.php/pub/common_nav" rel="include"></div>
- //jquery代码
- $(document).ready(function () {
- $('[rel=\'include\']').each(function (e) {
- var t = $(this),
- url = t.attr('include') + location.search;
- url && $.get(url, function (data) {//url:'/index.php/pub/common_nav'
- t.html(data);
- })
- })
- })
- 34、拼接insert sql语句
- /**
- *一维关联数组,拼接sql语句
- *$data['username']="admin";
- *$data['password']="12345";
- *$data['sex']="";
- */
- function add_user( $data ) {
- if ( empty($data) || !is_array($data) ) {
- return false;
- }
- foreach ($data as $key => $value) {
- if ( $value === '') {
- unset($data[$key]);//删除数组中值为空的元素
- }
- }
- $cols = array_keys($data);//获取数组所有的键名
- $values = array_values($data);//获取数组所有的值
- $cols_str = implode(",", $cols);//将数组所有的键名拼接成一个字符串
- $values_str = "'".implode("','", $values)."'";//将数组所有的键值放到单引号中
- //拼接sql:INSERT INTO user (username,password) VALUES ('admin','12345');
- $sql = "INSERT INTO user ({$cols_str}) VALUES ({$values_str})";//拼接sql
- $this->db->query($sql);
- }
- 35、拼接insert sql语句
- /**
- *一维关联数组,拼接sql语句
- *$data['username']="admin";
- *$data['password']="12345";
- *$data['sex']="";
- */
- function add_user( $data ) {
- if ( empty($data) || !is_array($data) ) {
- return false;
- }
- foreach ($data as $key => $value) {
- if ( $value === '') {
- unset($data[$key]);//删除数组中值为空的元素
- }
- }
- $cols = array_keys($data);//获取数组所有的键名
- $values = array_values($data);//获取数组所有的值
- foreach($values as $k=>$val){
- $values[$k]="'".$val."'";//将所有的键值放到单引号中
- }
- $cols_str = implode(",", $cols);//将数组所有的键名拼接成一个字符串
- $values_str = implode(",", $values);//将数组所有的键值拼接成一个字符串
- //拼接sql:INSERT INTO user (username,password) VALUES ('admin','12345');
- $sql = "INSERT INTO user ({$cols_str}) VALUES ({$values_str})";//拼接sql
- $this->db->query($sql);
- }
- 36、拼接update sql语句
- /**
- * 编辑用户信息
- * $userid=1;
- * $data['username']='admin';
- * $data['password']='123';
- */
- function edit_user(userid, $data) {
- if ( empty($data) || !is_array($data) ) {
- return;
- }
- foreach ($data as $key => $value) {
- $str .= isset($str)?", {$key} = '{$value}'":"{$key} = '{$value}'";
- }
- //拼接sql:UPDATE user SET username='admin',password='123' WHERE addr_id = '1';
- $sql = "UPDATE user SET {$str} WHERE addr_id = '{$addr_id}'";
- $this->db->query($sql);
- }
- 37、数据库快捷操作类常用方法
- /**
- * 查询订单
- *
- * @param $query
- */
- public function get_order_list($query, $offset = 0, $limit = 20) {
- if (is_array($query) && !empty($query)) {
- foreach ($query as $key => $val) {
- if (is_array($val)) {
- $this->order_db->where_in($key, $val);
- } else {
- $this->order_db->where($key, $val);
- }
- }
- }
- $this->order_db->order_by('updatetime', 'desc');
- $this->order_db->order_by('id', 'desc');
- if (!$limit) {
- $query = $this->order_db->get('order');
- } else {
- $query = $this->order_db->get('order', $limit, $offset);
- }
- if ($query->num_rows() > 0) {
- return $query->result_array();
- }
- return array();
- }
- 38、拼接select sql语句
- function get_user_list($cols=array("username","password")) {
- $col=implode(",",$cols);//查询的列属性
- $sql = "SELECT $col FROM user ORDER BY addr_id DESC";
- $this->db->query($sql)->result_array();
- }
- 39、CI框架中cookie的三种使用方式
- //第一种设置cookie的方式:采用php原生态的方法设置的cookie的值
- setcookie("user_id",$user_info['user_id'],86500);
- setcookie("username",$user_info['username'],86500);
- setcookie("password",$user_info['password'],86500);
- //echo $_COOKIE['username'];
- //第二种设置cookie的方式:通过CI框架的input类库设置cookie的值
- $this->input->set_cookie("username",$user_info['username'],60);
- $this->input->set_cookie("password",$user_info['password'],60);
- $this->input->set_cookie("user_id",$user_info['user_id'],60);
- //echo $this->input->cookie("password");//适用于控制器
- //echo $this->input->cookie("username");//适用于控制器
- //echo $_COOKIE['username'];//在模型类中可以通过这种方式获取cookie值
- //echo $_COOKIE['password'];//在模型类中可以通过这种方式获取cookie值
- //第三种设置cookie的方式:通过CI框架的cookie_helper.php辅助函数库设置cookie的值
- set_cookie("username",$user_info['username'],60);
- set_cookie("password",$user_info['password'],60);
- set_cookie("user_id",$user_info['user_id'],60);
- //echo get_cookie("username");
- 40、array_merge()合并数组函数的使用
- <?php
- header("content-type:text/html;charset='utf-8'");
- $arr1=array(
- "13012"=>array(
- "brand_id"=>2,
- "category_id"=>3
- )
- );
- $arr2=array(
- "13012"=>array(
- "goods_id"=>3576,
- "goods_name"=>"sanyang"
- )
- );
- /**
- *echo "<pre>";print_r(array_merge($arr1,$arr2));
- *结果:
- *Array
- * (
- * [0] => Array //索引重置为数字索引
- * (
- * [brand_id] => 2
- * [category_id] => 3
- * )
- * [1] => Array
- * (
- * [goods_id] => 3576
- * [goods_name] => sanyang
- * )
- * )
- */
- /**
- *echo "<pre>";print_r(array_merge($arr1['13012'],$arr2['13012']));
- *结果:
- * Array
- * (
- * [brand_id] => 2
- * [category_id] => 3
- * [goods_id] => 3576
- * [goods_name] => sanyang
- * )
- */
- ?>
- 41.json格式数据:
- public function json(){
- $data[0]['goods_id']=3567;
- $data[0]['goods_name']="sanyang";
- $data[1]['goods_id']=3567;
- $data[1]['goods_name']="sanyang";
- echo json_encode($data);exit;
- /**
- * 结果:
- * [
- * {
- * "goods_id": 3567,
- * "goods_name": "sanyang"
- * },
- * {
- * "goods_id": 3567,
- * "goods_name": "sanyang"
- * }
- *]
- */
- }
- 42.联合查询 left join
- //controller控制器
- $query = array(
- 'product_id' => $product_id,
- 'activity.status' => array(1, 2, 0),
- 'activity.is_del' => 0
- );
- $query['activity.activity_id<>'] = $activity_id;
- $goods_list = $this->activity_model->get_activity_good_mapping($query, 0, 0);
- //model模型
- public function get_activity_good_mapping($query,$offset = 0, $limit = 0,$get=''){
- $this->db = $this->activity_db;
- if (is_array($query) && !empty($query)) {
- foreach ($query as $key => $val) {
- if (is_array($val)) {
- $this->db->where_in($key, $val);
- } else {
- $this->db->where($key, $val);
- }
- }
- }
- $this->db->from('activity_goods');
- $this->db->join('activity', 'activity_goods.activity_id = activity.activity_id','left');
- if (!$limit) {
- } else {
- $query = $this->db->limit($limit, $offset);
- }
- $query = $this->db->get();
- if ($query->num_rows() > 0) {
- return $query->result_array();
- }
- return array();
- }
- 43.ci框架如何记录sql日志?
- (1)配置日志目录: 在"application/config/config.php" 文件中配置日志目录
- $config['log_path']="/opt/www/logs/";
- (2)在 "system/database/DB_driver.php" 文件的query()方法末尾添加如下语句:
- log_message( 'db','【sql语句:'.$this->last_query().'】');//这样所有执行过的sql语句都会按日期时间格式记录到 "/opt/www/logs/" 目录下
- return $RES;
二、部分截图如下:
三、数据库操作类之间的继承关系(区分数据库普通操作类和数据库快捷操作类),如图所示:
注意:CI_DB类是在DB()函数中动态定义的,没有单独的类库文件
DB()函数在DB.php文件中定义
DB.php文件中部分代码如下:
- require_once(BASEPATH.'database/DB_driver.php');//类名:CI_DB_driver
- if ( ! isset($active_record) OR $active_record == TRUE)
- {
- require_once(BASEPATH.'database/DB_active_rec.php');
- if ( ! class_exists('CI_DB'))
- {
- eval('class CI_DB extends CI_DB_active_record { }');//继承关系
- }
- }
- else
- {
- if ( ! class_exists('CI_DB'))
- {
- eval('class CI_DB extends CI_DB_driver { }');//继承关系
- }
- }
- require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php');//类名:CI_DB_mysql_driver
- // Instantiate the DB adapter
- $driver = 'CI_DB_'.$params['dbdriver'].'_driver';//类名:"CI_DB_mysql_driver"
- $DB = new $driver($params);//创建一个数据库操作类句柄对象: $DB=new CI_DB_mysql_driver($paams); 继承关系:class CI_DB_mysql_driver extends CI_DB{}
- if ($DB->autoinit == TRUE)
- {
- $DB->initialize();
- }
- if (isset($params['stricton']) && $params['stricton'] == TRUE)
- {
- $DB->query('SET SESSION sql_mode="STRICT_ALL_TABLES"');
- }
- return $DB;//返回数据库操作类句柄对象
提示:$this->load->database();//内部通过加载DB.php文件并调用DB()函数来实现不同数据库驱动类的加载
$this->product_db = $this->load->database('product', true);//连接"product"数据库,并返回数据库操作类句柄,参数2-代表返回的数据库句柄
$this->wms_db = $this->load->database('wms', true);//连接"wms"数据库,并返回数据库操作类句柄,参数2-代表返回的数据库句柄
$this->order_db = $this->load->database('order', true);//连接"order"数据库,并返回数据库操作类句柄,参数2-代表返回的数据库句柄
四、模型类分析:CI_Model
模型类分析:CI_Model
数据库普通操作类(CI_DB_driver)中的query()方法内部,通过$driver= $this->load_rdriver(); $RES= new $driver();两行代码加载并实例化了一个CI_DB_mysql_result结果集对象(总结:以驱动的方式加载结果集对象),经过对结果集对象的一些列初始化操作,最终返回此结果集对象(总结:query()方法中返回了一个CI_DB_mysql_result结果集对象)
- //CI_DB_driver 基类中的load_rdriver()方法在数据库普通操作基类中的query()方法中被调用,用来返回一个结果集对象
- function load_rdriver(){
- $driver = 'CI_DB_'.$this->dbdriver.'_result';
- if ( ! class_exists($driver))
- {
- include_once(BASEPATH.'database/DB_result.php');//类名:CI_DB_result
- include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result.php');//类名:CI_DB_mysql_result
- }
- return $driver;//继承关系:class CI_DB_mysql_result extends CI_DB_result
- }
提示:也就是说,类似 $this->db->query("select * from user"); 的语句,返回的都是一个结果集对象
$this->db->query("select * from user")->result_array();//将结果集转换为二维关联数组
$this->db->query("select * from user")->row_array();//将结果集转换为一维关联数组
数据库快捷操作类(CI_DB_active_record)中的get()、insert()等多个方法内部都调用了数据库普通操作类中的query()方法,即:间接的返回了CI_DB_mysql_result结果集对象
数据库快捷操作类中很多对结果集的操作函数内部都是通过封装返回的CI_DB_mysql_result结果集对象中的方法来完成相似功能的(总结:get()、insert()方法内部最后调用了query()方法,并返回query()方法执行的结果,所以返回的也是一个CI_DB_mysql_result结果集对象)
数据库快捷操作类中的方法其实只干了一件事情,那就是通过函数的方式帮助我们拼接了要执行的sql语句,并执行该sql语句
但是对于复杂的sql语句,尤其对于复杂的多表查询语句,个人还是建议直接使用数据库普通操作类中的query()方法(适用于两个表以上的情况)
对于返回的结果集对象而言,结果集对象中的方法是通用的(总结:CI_DB_mysql_result结果集对象中对结果集的处理函数对于数据库普通操作类和数据库快捷操作类是通用的)
我们可以这样理解:数据库快捷操作类是对数据库普通操作类的二次封装
提示:数据库操作类的继承关系
class CI_DB_active_record extends CI_DB_driver {
//代码
}
**【ci框架】精通CodeIgniter框架的更多相关文章
- CI(CodeIgniter)框架入门教程——第二课 初始MVC
本文转载自:http://www.softeng.cn/?p=53 今天的主要内容是,使用CodeIgniter框架完整的MVC内容来做一个简单的计算器,通过这个计算器,让大家能够体会到我在第一节课中 ...
- CodeIgniter框架入门教程——第三课 URL及ajax
本文转载自:http://www.softeng.cn/?p=74 这节课讲一下CI框架的路由规则,以及如何在CI框架下实现ajax功能. 首先,先介绍CI框架的路由规则,因为CI框架是在PHP的基础 ...
- ***PHP中error_reporting()用法详解(含codeigniter框架中屏蔽错误提示的解决方案)
php中我们对错误的处理会常用到error_reporting函数了,大家可以看到最多的是error_reporting(E_ALL ^ E_NOTICE)了,这个到底什么意思呢,下面我来来看看. e ...
- 一步一步重写 CodeIgniter 框架 (9) —— 使用 CodeIgniter 类库
通过前面几节的内容,我们从零开始搭建了一个非常方便的MVC框架,理解了 CodeIgniter 框架最核心的部分.然而一个框架的便利不仅仅在于提供一个MVC就可以了,它还必须具有较高的扩展性.下面将从 ...
- 一步一步重写 CodeIgniter 框架 (5) —— 实现Controller,并加载Model
CodeIgniter 框架采用MVC模式,而MVC模式中起纽带作用的就是C(控制器),在控制器的中通过加载模型获得数据,将数据传到视图中进行展示.本课将实现在控制器中加载模型. 1. 控制器的实现 ...
- 一步一步重写 CodeIgniter 框架 (4) —— load_class 管理多个对象实例的思路
我们使用CodeIgniter 框架最主要是想利用其 MVC 特性,将模型.视图分开,并通过控制器进行统一控制.在尝试实现 MVC 模式之前,我们将实现其中一个对程序结构非常有用的技巧,就是 load ...
- 一步一步重写 CodeIgniter 框架 (3) —— 用面向对象重构代码
前面两篇文章为了重点突出 CodeIgniter 框架的原理,程序的结构很乱,有很多全局变量,在这一课中我们采用面向对象的方法对原先代码进行重构. 到目前为止,程序主要完成的就是 URL 分析,并根据 ...
- 一步一步重写 CodeIgniter 框架 (1) —— url 如何映射到具体的方法
CodeIgniter 框架最显著的特征就是 MVC 模式,它的做法就是提取 url 中的'分段', 映射到某个类的某个方法,从而由该方法来输出最终显示的页面内容.那么我们第一课中就是实现一个这样的原 ...
- 使用 CodeIgniter 框架快速开发 PHP 应用(七)
原文:使用 CodeIgniter 框架快速开发 PHP 应用(七) CodeIgniter 和对象这是玩家章节.它讲述的是 CodeIgniter 的工作原理,也就是揭开CI头上'神秘的面纱'.如果 ...
随机推荐
- bzoj 1009:[HNOI2008]GT考试
这道题机房n多人好久之前就A了…… 我到现在才做出来…… 一看就是DP+矩阵乘法,但是一开始递推式推错了…… 正确的递推式应该是二维的…… f[i][j] 表示第准考证到第 i 位匹配了 j 位的方案 ...
- Apache HTTP Server安装教程
Apache HTTP Server安装教程 Apache HTTP Server的官方网站是:http://httpd.apache.org/,可以从中下载最新版本的Apache HTTP Serv ...
- Linux系统环境变量及命令
Linux哪些我们常用,但是用的时候想不起来,这里做一个备忘录. Linux常用的变量: PATH 决定了shell将到哪些目录中寻找命令或程序 HOME 当前用户主目录 HISTSIZE 历史记录数 ...
- winform:无法引用其他类库,dll,using等个人看法【图】
在项目类库中已经引用了相关了类库,生成解决方案也没问题,但是到了后置代码,通过using引用其他类库的时候,再生成解决方案或者生成单个类库,就会报“未能找到类型或命名空间“xxx"(是否缺少 ...
- Freezable 对象(WPF)
# Freezable 对象(WPF) # > Freezable 继承自 DependencyObject,同时添加了 Freezable 方法,用于冻结对象. --- ## 冻结对象 ## ...
- js----DOM的三大节点及部分用法
DOM有三种节点:元素节点.属性节点.文本节点. 一.用nodeType可以检测节点的类型 节点类型 nodeType属性值 元素节点 1 属性节点 2 文本节点 3 这样方便在js中对各个节点进行操 ...
- Mod 与 RequireJS/SeaJS 的那些事
本文的目的是为了能大让家更好的认识 Mod,之所以引入 RequireJS/SeaJS 的对比主要是应大家要求更清晰的对比应用场景,并不是为了比较出孰胜孰劣,RequireJS 和 SeaJS 都是模 ...
- Delphi ISO 收藏!
CodeGear RAD Studio 2007 最终版(With Update4) v11.0.2902.10471http://altd.codegear.com/download/radstud ...
- DataSnap如何监控Tcp/IP客户端的连接情况
一个实例,如果客户端是TCP/IP是短连接的情况就没有必要了. 一.GlobVar.pas单元,定义应用系统全局数据类型及变量: unit GlobVar; interface uses System ...
- python之方法总结
python的OOP的方法有3种: 1. 实例方法: 接收self参数 2. 类方法: 接收cls参数, 并要用classmethod()注册或者@classmethod注解. 3. 静态方法: 不接 ...