用户
 找回密码
 入住 CI 中国社区
搜索
查看: 69794|回复: 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('')
发表于 2015-1-8 23:47:16 | 显示全部楼层
楼主我想问问在其他地方时如何调用控制器里面的方法呢 是用$this->load->controller('')
发表于 2014-8-8 17:01:30 | 显示全部楼层
嗯,感觉CI的URL方式比较简洁
发表于 2014-7-18 12:11:53 | 显示全部楼层
说得太好了,初学者受益匪浅
发表于 2014-2-14 10:26:08 | 显示全部楼层
学习,留名
发表于 2014-1-25 10:43:04 | 显示全部楼层
学习

本版积分规则