高手指导的学习流程,受益匪浅
codeigniter的程序流程 1. 设计视图
首先,让我们设计视图并把它保存到如下路径:system/application/views/testview.php
- <html>
- <head>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http:////www.w3.org/1999/xhtml">
- <title>Web test Site</title>
- </head>
- <body>
- <h1><?php echo $mytitle; ?> </h1>
- <p class="test"> <?php echo $mytext; ?> </p>
- </body>
- </html>
代码片段1 视图demo 你还可以联想到,变量$mytitle和$mytext的内容呢?答案是我们需要一个新的控制器!
2. 设计控制器
现在,我们需要一个新的控制器。我们将其命名为Start并保存在:/system/application/controllers/start.php
该控制器必须做几件事:
· 调用视图
· 把一些数据传递给视图:它正在期待标题($mytitle)和一些本文($mytext)
· 最后,我们想要控制器接受来自使用者的一个参数(例如通过URL请求)
<?phpclass Start extends CI_Controller { function __construct() { parent::__construct(); - }
代码片段2 控制器构造函数 在上面的代码中可以看出Start是一个构造函数,他完成了控制器的初始化。
下面是将参数传递个一个函数的代码:
- function hello($name)
- {
- $data['mytitle'] = 'Welcome to this site';
- $data['mytext'] = "Hello, $name, now we're getting dynamic!";
- $this->load->view('testview', $data);
- }
- ?>
代码片段3 控制器url映射函数
这个函数期待一个参数,$name,可能会产生疑问$name变量从哪来?其实它需要来自URL请求的第三个参数,话句话说换句话说,当你输入URL:
http://www.mysite.com/index.php/start/hello/fred
URL的最后一段作为一个参数传给函数hello,倒数第二个参数是指当前的函数名是hello,倒数第三个函数是指当前的控制器名字是start。当然我们还会看到index.php这个参数,这是由于CI将所有的请求都发送到了index.php文件中,你也可以用.htaccess文件重写URL来去掉index.php,考虑到服务器可能不支持.htaccess,我们没有做出修改。
再回到对控制器的讨论中,注意hello()函数如何先设置一个名为$data的数组,并把一些对象的属性及文本读入数组。然后它通过名称装载视图,并把刚生成的$data数组作为第二个参数。在幕后,CI很好地利用了另外一个PHP函数:extract(),这个函数的作用是把数组中的元素取出放入变量表,其中每个键值对中的键名即为变量名,对应该键名的值为变量的值。因此我们刚才定义的$data数组在视图中转换成一个单一的变量:$text(等于“Hello, $name, now we're getting dynamic”)。
换句话说,当它被建立的时候,$data数组看起来像这样:
Array
(
[mytitle] => 'Welcome to this site',
[mytext] => "Hello, fred, now we're getting dynamic!"
);
但是当它被传递给视图的过程中,它被解开,并且下列变量在视图对象中生成,与$data的每个键/值相对应:
$mytitle = 'Welcome to this site';
$mytext = "Hello, fred, now we're getting dynamic!";
虽然你只传送一个变量到视图中,但是,你能把许多数据装进那个变量中。$data数组的每个值还可以是数组,这被称为多维数组,因此,用一个数组变量可以把大量的变量传递给视图。
3.设计模型
其实模型的设计要在控制器之前完成的,但是为了演示控制器和视图之间的数据流动,我们把控制器和视图放到一起说了。
所以说上面介绍的只是VC,因为还没介绍到M,也就是模型。下面构造一个MVC的完整流程。
在第二部分介绍控制器时给数组$data的元素赋值时,我们用到的都是常量,其实在实际的编码情况中,我们的数据都是从数据库中读出的,这份工作就是下面要说到的控制器的职责。先看下面一部分代码:
- <?php
- class Art extends CI_Model {
- public function __construct() {
- parent::__construct();
- //$this->load->library('database');//在autoload.php中配置了自动加载database类
- }
- public function getList($name) {
- $this->db->select('title,content');
- if (!is_null($name)) {
- $this->db->where('author', $name);
- }
- $result=$this->db->get('art');
- return $result->num_rows()>0 ? $result->result_array() : null;
- }
- }
- ?>
代码片段4 模型demo