先介绍CI框架的应用程序流程图
1.index.php作为前端的控制器,初始化运行CI所需的基本资源;
2.router检查http请求,确定如何处理请求;
3.如果有存在缓存文件,将直接输出到浏览器,不用走垢面的流程
4.加载控制器前,对http请求和任意用户提交的数据进行安全检查;
5.加载模型,核心类库,辅助函数以及处理请求所需要的资源
6.最后加载视图发送到浏览器,如何开启了缓存,视图会被先缓存起来用于后续的请求
了解了CI框架的处理流程,下面介绍CI的MVC模式。
模型-视图-控制器,将程序的逻辑层和表现层分离,使得页面包含很少的PHP脚本。
模型: 包含对数据库增删查改的方法
视图:展示给用户的页面
控制器:模型,视图和处理HTTP请求所需资源的中介,并生成网页。
了解URL分段
如何遵循模型-视图-控制器模式,URL中的每一段通常表示下面的含义
example,com/class/function/Id
1.第一段表示要调用的控制器的 类
2.第二段表示调用类中的函数或方法
3.第三段表示传给控制器的参数,ID或者其他变量
介绍控制器
简单得说,控制器就是一个类文件,文件名,类名必须为大写,并继承父类控制器。它是处理Web请求的核心,可以称为超级对 象。在控制器中可以使用$this 来访问它,这样就可以加载类库,视图以及针对框架的一般性操作。
比如 example.com/index.php/Blog
CI 会查询一个名为Blog的控制器并加载
example.com/index.php/Blog/index "index"方法总是在第二段为空时被调用,可以修改成其他方法。
也可以通过URL分段向方法传递参数
example.com/index.php/products.shoes.sandals/123 方法会收到最后的两个参数
<?php class Products extends CI_Controller { public function shoes($sandals, $id) { echo $sandals; echo $id; } }
介绍视图
其实就是一个web页面,他不是直接被调用,必须通过控制器来加载。
<?php class Blog extends CI_Controller { public function index() { //加载指定的视图 $this->load->view('blogview'); } }还可以向视图动态添加数据,参数可以是一个数组或者一个对象。
//使用数组的例子 $data = array( 'title' => 'My Title', 'heading' => 'My Heading', 'message' => 'My Message' ); $this->load->view('blogview', $data); //使用对象的例子 $data = new Someclass(); $this->load->view('blogview', $data); //在控制器中写一下代码 <?php class Blog extends CI_Controller { public function index() { $data['title'] = "My Real Title"; $data['heading'] = "My Real Heading"; $this->load->view('blogview', $data); } } //打开视图文件,修改为传入的数组对应变量 <html> <head> <title><?php echo $title;?></title> </head> <body> <h1><?php echo $heading;?></h1> </body> </html>在视图中使用循环,并使用PHP的替代语法。
//控制器 <?php class Blog extends CI_Controller { public function index() { $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands'); $data['title'] = "My Real Title"; $data['heading'] = "My Real Heading"; $this->load->view('blogview', $data); } } //视图文件 <html> <head> <title><?php echo $title;?></title> </head> <body> <h1><?php echo $heading;?></h1> <h3>My Todo List</h3> <ul> <?php foreach ($todo_list as $item):?> <li><?php echo $item;?></li> <?php endforeach;?> </ul> </body> </html>
文件名和类名应该一致,首字母为大写,先配置appication/config/database.php,添加数据库的地址,登陆名和密码,并加载
$this->load->model('model_name')
CI提供提供了查询构造器,帮助我们用更少的代码对操作数据
查询
$query = $this->db->get(‘mytable’,10,20)
这个方法执行SELECT语句并返回查询结果,可以得到一个表所有的数据,第二和第三个参数用于设置limit子句,可以省略。
上面方法的结果赋给了1个$query变量。通过这个变量,可以得到查询的结果。
$query = $this->db->get('mytable'); foreach ($query->result() as $row) { echo $row->title; }生成查询结果有几种不同的方法,如结果数组,结果行,自定义结果对象
上面的例子使用了结果数组中的result()方法,以对象数组的形式返回查询的结果,一般在foreach循环中使用。
$query = $this->db->query("YOUR QUERY"); foreach ($query->result() as $row) { echo $row->title; echo $row->name; echo $row->body; } $query = $this->db->query("YOUR QUERY"); foreach ($query->result_array() as $row) { echo $row['title']; echo $row['name']; echo $row['body']; } $row = $query->row(); if (isset($row)) { echo $row->title; echo $row->name; echo $row->body; }