用户
 找回密码
 入住 CI 中国社区
搜索
查看: 70922|回复: 75
收起左侧

CodeIgniter 的基本架构

    [复制链接]
发表于 2007-10-15 13:21:39 | 显示全部楼层 |阅读模式
作者: tzangms

  先来介绍一下 CodeIgniter 的基本架构好了, 所以先来说明一下 CI 的页面是怎么做的。由于使用 MVC 架构, 所以最主要的就是 Controller, 程式透过 Controller 来呼叫 Model 存取资料库, 然后在指定 View 输出, 这样一来, Controller 就可以变得很简单。以制作 Blog 为例, Blog 的首页通常都会显示最新的 10 篇文章, 就以这个简单的范例来说明。不过在这里先只讨论 Controller 部份。
  基本上, 每个 Controller 都是一个 Class, 在每个 Class 里面的 function 都是一个页面, 嗯, 这个概念很重要! 先来看看下面这一段, 应该就会比较清楚。
PHP复制代码
<?php
class Blog extends Controller{
    function index(){
        $this->load->model('blog_model');
        $data = $this->blog_model->get_lastest_entries();
 
        $this->load->view('blog', $data);
    }
 
    function post($id){
        echo "这里是第 $id 篇文章";
    }
}
?>
复制代码

在上面这段程式码, 可以看到是一个叫做 Blog 的 Class, 里面包含了 index 以及 post 两个 function。先来说明比较简单的 post 好了, 在先前有提到, 在 Class 中的 function 其实就是一个页面, 不像以往, 一个 php 档案就是一个页面。

接着来看看要如何存取 post 这个页面, 首先看到下面这个网址

    http://domain/blog/post/26

这个网址在 domain 后面的部份, 一开始接的是 “blog”, 没错, 指的就是刚才上面写的 Blog Class, 接着是 “post” 就是在 Class 中看到的 post function, 再后面的 “26〃 就是要传给 post function 的 $id 变数, 也就是第 26 篇文章, 所以只要输入上面的网址, 就可以执行 Blog class 中的 post function, 而输出的结果就跟程式中看到的一样, 会直接输出一行文字, 如下:

    这里是第 26 篇文章

看到这边大概就知道 CI 的 Controller 是怎么运作的吧? 好, 接着再来看看 index 这个 function, 存取 index 页面的网址如下

    http://domain/blog/index

或更简短

    http://domain/blog

只要输入上面这个网址就会显示出 index 这个 function 所产生的页面, 也就是显示最新的 10 篇 blog 文章。另外, 由于 index 是 CI 预设的首页, 所以存取这个页面的网址可以比 post 更简短, 不过这个 index function 未免也太简洁了吧!? 没错, 使用 CI 就是那么简洁

接下来来说明一下 index 里的程式码, 可以看到 index function 里总共只有 3 行, 先来看看第一行:

$this->load->model('blog_model');

在这里大家先知道, 这里是在载入一个叫做 blog_model 的 Model, 而 Model 主要的工作就是在存取资料库。接下来第二行如下:

$data = $this->blog_model->get_lastest_entries();

在这里就先想像一下 blog_model 中, 已经写好一个叫做 get_latest_entries 的 function, 会取出最新的 10 篇文章然后 return。而在上面可以看到, 最后会将取出的资料传给 $data 这个变数, 接着在最后一行, 将 $data 一起输出给 View, 这样一来就完成了 Blog 首页啦!! 当然 View 的部份也就不先说明了。不过还是列一下如和载入要显示的 View, 并先前透过 get_latest_entries 所取出的资料一起透过 View 输出。

$this->load->view('blog', $data);

基本上 Controller 就是长得这样, 在一个 Controller (Class) 中包含许多页面(function), 这么一来, 把相关的页面写在同一支 Controller 中, 是不是比较好维护呢? 另外使用 MVC 架构, Controller 看起来也会简洁许多。

评分

参与人数 4威望 +16 收起 理由
高飞 + 5 赞一个!
冰释心灵 + 5 赞一个!
〃怕瓦落地2 + 5 赞一个!
凝思 + 1 赞一个!

查看全部评分

发表于 2015-1-8 23:48:43 | 显示全部楼层
本帖最后由 锋之路 于 2015-1-8 23:49 编辑

楼主我想问问在其他地方时如何调用控制器里面的方法呢 是用$this->load->controller('方法')?  还有就是我们按钮点击时候触发这些方法是如何使用的呢
发表于 2015-1-8 23:48:08 | 显示全部楼层
楼主我想问问在其他地方时如何调用控制器里面的方法呢 是用$this->load->controller('')
发表于 2015-1-8 23:47:57 | 显示全部楼层
楼主我想问问在其他地方时如何调用控制器里面的方法呢 是用$this->load->controller('')
发表于 2007-10-16 00:24:44 | 显示全部楼层
谢谢分享这么好的说明。
 楼主| 发表于 2007-10-16 09:42:16 | 显示全部楼层
呵呵,希望常来 CI 粉丝的家,呵呵。
发表于 2007-10-16 22:11:27 | 显示全部楼层
其实我的ZF改进版权是很像的..
不知这个CI对URI的处理是不是很灵活了?
比如一个URI有多个参数
cid=1&pn=4&itemtype=3&by=desc...........
这等是怎么处理的??
 楼主| 发表于 2007-10-17 09:19:04 | 显示全部楼层
CI 的 URL 一般是分段处理的,/index.php/控制器类/方法/参数1/参数2/参数3/....
一般不使用 URL 参数,如果使用也是可以定义的,不过我觉得对于 SEO 效果不如分段好。
发表于 2007-10-31 16:18:24 | 显示全部楼层

很经典呀

5楼说“一般不使用 URL 参数,如果使用也是可以定义的”,要使用的话怎么定义?
 楼主| 发表于 2007-11-1 10:37:14 | 显示全部楼层
在 config.php 里配置以后,可以使用 ?xxx=xxx&xxx=xxx 这种参数。
发表于 2007-11-7 14:56:23 | 显示全部楼层
直接用$this->uri->segment(n)就行了
 楼主| 发表于 2007-11-7 17:11:22 | 显示全部楼层
呵呵,楼上的他意思是要用普通的 URL 参数吧,不是分段这种,呵呵 ~~
发表于 2007-11-11 17:02:32 | 显示全部楼层
原帖由 Hex 于 2007-11-1 10:37 发表
在 config.php 里配置以后,可以使用 ?xxx=xxx&xxx=xxx 这种参数。


请问一下如何设置,具体参数是什么?谢谢先!!

本版积分规则