[code lang=”php”]
1、在讲解文件所在目录方面的问题时:

application
|—–core
|—–MY_Controller.php

system
|—–core
|—–Controller.php

思路:

一、目前在企业中使用比较多的框架有如下几种:

1、zendframework框架:此框架由zend公司开发并负责维护,入门比较困难一点,但是据说功能很强悍,属于一款偏重量级的MVC框架
2、Yii框架:又称为 "易框架",在外企使用居多
3、thinkphp框架:是国人开发的一款框架,由于它的注释和使用文档都是中文,所以很受国人的喜欢
4、codeigniter框架:简称CI框架,是国外一款流行的框架,跟前面的框架比较,ci框架是最轻量级的,也是最容易上手的

二、我们选择这款框架来学习,主要有以下几点原因:

1、ci是一个轻量级的框架,关于轻量级,可从两方面来理解:
1、体积小,解压后不到4M,zendframework解压后60M左右
2、占用资源少:ci应用程序在运行的时候,只是将正常运行所必须的几个核心类库载入到了内存中,其它类库在请求的时候才会加载,这样就达到了资源的最小化,这跟那些需要很多资源的框架是不一样的,有些框架在运行的时候,会将所有的类库首先载入内存中,而不管这些类库是否能够用的到,如:cakephp
3、但是这个轻量级,并不影响它开发大型的web应用程序,为什么这么说呢?
首先,它自身所提供的类库,已经能够帮助我们完成web应用程序中的大部分功能
再者,ci框架在整合第三方类库方面也有独到的优势,几乎不需要进行任何配置

2、整合第三方类库简单,几乎不需要进行任何配置

3、不需要使用模板引擎技术

大家知道,php原生态的语法结构执行效率是最高的,因为跟使用了模板引擎技术的程序相比较,它少了一个编译的过程

三、下面,我们就来进行ci框架的安装:

ci框架的安装,我们只需要按照如下步骤进行操作就可以了
1、官网:http://www.codeigniter.com 去下载ci框架最新的版本,目前最新版本为2.1.3
中文网站:http://www.codeigniter.org.cn

2、下载完毕后,解压,并将其复制粘贴到程序的主目录(d:/wamp/xmall/),然后再将其重命名为"myshop",那么"myshop" 就作为ci项目名称存在了

3、为我们的ci项目搭建一个虚拟主机:

首先,找到httpd.conf配置文件,开启虚拟主机的配置

然后,找到httpd-vhosts.conf配置文件,进行虚拟主机的配置

最后,找到hosts配置文件,为我们的ci项目添加dns映射

4、在浏览器中输入 http://www.myshop.com/index.php 回车,如能看到如下欢迎界面,则表示我们的ci项目安装成功了

四、ci框架的目录结构分析:

了解ci框架的目录结构,有助于帮助我们快速建立起对ci框架的一个整体认识

打开"myshop"项目,有如下文件和目录

使用协议说明文档、英文版的用户手册,这两项不是项目所必须的,可暂时将其删除

myshop
|—–system 框架程序目录
|—–core 框架的核心程序
|—–CodeIgniter.php 引导性文件
|—–Common.php 加载基类库的公共函数
|—–Controller.php 基控制器类文件:CI_Controller
|—–Model.php 基模型类文件:CI_Model
|—–Config.php 配置类文件:CI_Config
|—–Input.php 输入类文件:CI_Input
|—–Output.php 输出类文件:CI_Output
|—–URL.php URL类文件:CI_URl
|—–Router.php 路由类文件:CI_Router
|—–Loader.php 加载类文件:CI_Loader
|—–helpers 辅助函数
|—–url_helper.php url相关的辅助函数,如:创建url的辅助函数
|—–captcha_helper.php创建图形验证码的辅助函数
|—–libraries 通用类库
|—–Pagination.php 通用分页类库
|—–Upload.php 通用文件上传类库
|—–Image_lib.php 通用图像处理类库
|—–Session.php 通用session类库
|—–language 语言包
|—–database 数据库操作相关的程序
|—–DB_active_rec.php 快捷操作类文件(ActiveRecord)
|—–fonts 字库

|—–application 项目目录
|—–core 项目的核心程序
|—–helpers 项目的辅助函数
|—–libraries 通用类库
|—–language 语言包
|—–config 项目相关的配置
|—–config.php 项目相关的配置文件
|—–database.php 数据库相关的配置文件
|—–autoload.php 设置自动加载类库的配置文件
|—–constants.php 常量配置文件
|—–routes.php 路由配置文件
|—–controllers 控制器目录
|—–welcome.php 控制器文件,继承CI_Controller
|—–models 模型目录
|—–welcome_model.php 模型文件,继承CI_Model
|—–views 视图目录
|—–welcome.php 视图模板文件,默认后缀名为.php
|—–cache 存放数据或模板的缓存文件
|—–errors 错误提示模板
|—–hooks 钩子,在不修改系统核心文件的基础上扩展系统功能
|—–third_party 第三方库
|—–logs 日志

|—–index.php 入口文件

五、ci框架中的url路由规则:

浏览器中输入 http://www.myshop.com/index.php/welcome/index/ 回车时,默认情况下会找到
application
|—–controllers
|—–welcome.php 控制器文件,并执行其中的index方法

|—–admin 子目录
|—–category.php 控制器文件

到底是不是呢?我们打开welcome.php控制器文件,并在index方法中添加一些代码,运行输出,证明确实如我们所料

我们可以将浏览器中的url归纳如下:http://域名/入口文件/控制器/方法/参数列表

当输入网址回车时,默认情况下会直接从controllers目录下寻找控制器文件,

如果我们的控制器文件放在controllers目录下的子目录中,又该如何访问呢?

例如:在controllers目录建立一个admin子目录,然后呢,在admin子目录下创建一个category.php控制器文件

那么,我们在访问category.php控制器文件中的addcategory方法时,在浏览器中怎样访问呢?

我们可以这样来访问:</pre>
http://www.myshop.com/index.php/admin/category/addcategory/
<pre>
即:http://域名/入口文件/controllers下的子目录/控制器/方法/参数列表

我们在浏览器中输入http://www.myshop.com/index.php 后面没有跟 "控制器/方法/参数列表" 回车时,默认情况下也会执行welcome.php控制器中的index方法。

这是因为ci框架为我们指定了一个默认的控制器和方法

默认控制器的设置在 "application/config/routes.php" 配置文件中进行设置的,我们可以重新设置默认的控制器

六、项目的部署:我们在实际部署大型项目时,还可以建立一些子目录及文件来帮助我们更好的管理我们的项目

1、子目录及入口文件的创建

controllers
|—–admin 后台控制器
|—–home 前台控制器
models
|—–admin 后台模型文件
|—–home 前台模型文件
views
|—–admin 后台模板文件
|—–category 后台商品分类模块相关的模板文件
|—–addcategory.html
|—–public 后台公共模板文件
|—–top.html
|—–left.html
|—–footer.html
|—–home 前台模板文件
core
|—–MY_Controller.php 扩展后的控制器文件,继承CI_Controller

public 素材文件
|—–images images文件
|—–admin 后台images文件
|—–home 前台images文件
|—–css css文件
|—–admin 后台css文件
|—–home 前台css文件
|—–js js文件
|—–admin 后台js文件
|—–home 前台js文件

uploads 上传附件

admin.php 后台入口文件:访问后台控制器,都必须经过admin.php入口
index.php 前台入口文件:访问前台控制器,都必须经过index.php入口

2、将后台模板文件及素材文件部署到我们的ci项目中来

css文件中采用绝对路径
模板文件中采用绝对路径

3、建立后台控制器文件:

application
|—–controllers
|—–admin
|—–index.php index.php控制器文件
|—–user.php 用户控制器文件
控制器的命名规范

$this->load->view("admin/index.html");//将后台模板文件显示出来

4、将前后台素材文件的路径写到常量文件中:application/config/constants.php

define("IMG_PATH","http://www.myshop.com/public/images/"); //images路径
define("CSS_PATH","http://www.myshop.com/public/css/"); //css路径
define("JS_PATH","http://www.myshop.com/public/js/"); //js路径

直接在控制器中获取常量的值:

$data[‘img_path’]=IMG_PATH;
$data[‘css_path’]=CSS_PATH;
$data[‘js_path’]=JS_PATH;

将$data数组传递给模板文件:

$this->load->view("admin/index.html",$data);//参数2:关联数组

5、也可以将素材文件的路径放到application/config/config.php配置文件中

$config[‘img_path’]="http://www.myshop.com/public/images/";
$config[‘js_path’]="http://www.myshop.com/public/css/";
$config[‘js_path’]="http://www.myshop.com/public/js/";

在控制器中获取application/config/config.php配置文件中的配置项:

$data[‘img_path’]=$this->config->item("img_path");
$data[‘css_path’]=$this->config->item("css_path");
$data[‘js_path’]=$this->config->item("js_path");

将$data数组传递给模板文件

$this->load->view("admin/index.html",$data);//参数2:关联数组

6、建立后台模型文件:

application
|—–models
|—–admin
|—–user_model.php 用户模型文件

模型文件的命名规范

如何在控制器中调用模型文件:

//1、实例化后台的user_model类对象,对象名称为user_model
//2、将user_model实例化对象作为控制器的user_model属性
//3、因此,我们可以在控制器中通过 $this->user_model 来获取user_model类对象,继而可以调用对象中的方法
$this->load->model("admin/user_model");

$this->user_model->adduser();

7、数据库操作:

数据表的创建:gt_users 导入一些数据

查询用户:首先在model中连接数据库,$this->load->database();然后我们可以在模型类的方法中查询所有的数据

在ci框架中操作数据库可分为两种方式

(1)方式一:普通查询:通过sql语句及db类的query()方法来完成,如下所示:

下面,我们先通过第一种方式来完成用户管理系统

//insert、delete、update操作返回布尔true或false
//select操作成功时返回结果集对象,失败时返回布尔值false
$query=$this->db->query($sql);

//通过结果集对象的方法将结果集转化为数据或对象
$data_array=$query->result_array();//将结果集转换为二维关联数组
$row_array=$query->row_array();//将结果集转换为一维关联数组

//获取查询到的行数
$num=$query->num_rows();

//db类中insert_id():返回最后一次插入数据的id
$id=$this->db->insert_id();

//分页类库的载入:
$this->load->library("pagination");//载入system/libraries/pagination.php分页类库
//分页配置:
$config[‘base_url’]="http://www.myshop.com/index.php/user/userlist/";
$config[‘total_rows’]=200;//总记录数,可从数据库获取
$config[‘per_page’]=10;//每页显示的记录数
$config[‘…’]="…";//其他配置

//初始化配置,使得分页配置生效
$this->pagination->initialize($config);
//创建默认风格的分页代码
$pages=$this->pagination->create_links();//$content[‘pages’]

//limit的值
$limit=($page-1)*$config[‘per_page’];

//注意:传递给模板文件的数据都必须放到关联数组中,会将关联数组中元素做为变量
$this->load->view("login.html",$content);//相当于extract($content)

//将分页配置信息放到application/config/pagination.php配置文件中
//载入pagination.php配置文件
$this->config->load("pagination");
//获取配置选项
$per_page=$this->config->item("per_page");//每页显示的记录数

链式操作:可采用链式操作

$data_array=$this->db->query($sql)->result_array();
$row_array=$this->db->query($sql)->row_array();

(2)方式二:快捷查询:主要通过快捷操作类来进行数据库操作(ActiveRecord)

什么是快捷操作类:主要用来将sql语句的拼接放到类的方法中来完成。

下面,我们再使用第二种方式来完成用户管理系统

//查询操作
$this->db->get("users",10,20);//参数2:每页显示的记录数 参数3:开始查询位置
$this->db->get_where("users",array(‘id’=>1),10,20);//参数3:每页显示的记录数

//案例1:在函数内部帮助我们自动拼接sql语句
$this->db->select("*");//1、返回一个db类实例化对象 2、将实例化对象作为模型类的db属性
$this->db->from("users");
$this->db->where("id",3);
$this->db->order_by("id","desc");
$this->db->get();

//案例2:
$this->db->select("*");
$this->db->where("id",3);
$this->db->order_by("id","desc");
$this->db->get("users");
$this->db->count_all_results();//获取查询到的总记录数

//插入操作:
$this->db->insert("users",$data_array);//参数1:表名 参数2:关联数组

//更新操作:
$this->db->update("users",$data_array,$where);//参数1:表名 参数3:关联数组

//删除操作:
$this->db->delete("users",$where);//参数1:表名 参数2:关联数组

//关于$where条件分析:
单条件时:使用键值对形式的条件
做比较时:使用运算符格式的条件
多条件时:使用关联数组的格式

链式操作:

//将结果集转化为二维关联数组
$data_array=$this->db->select(‘title’)->from(‘mytable’)->where(‘id’, $id)->limit($limit, $pagesize)->get()->result_array();

//将结果集转化为一维关联数组
$row_array=$this->db->select(‘title’)->from(‘mytable’)->where(‘id’, $id)->get()->row_array();
[/code]

 

来源:CSDN

Share:

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.