• 从CodeIgniter看PHP框架设计

    CodeIgniter与PHP框架设计
    服务器君一共花费 7.466 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    从这里开始,我们要研究下 PHP 的框架,研究的对象就是 CodeIgniter。为什么选 CodeIgniter 研究?因为它小巧,快速,流行,比较容易看清 PHP 框架的本质。

    总开关

    框架最重要的一个文件为入口文件,基本上相当于一个总控开关,所有的请求都需要经过这个文件。这个文件就是 index.php(下面只选取部分关键代码,后同):

    <?php
    $system_path = 'system';	// 应用路径
    $application_folder = 'application';	// 控制器路径
    define('BASEPATH', str_replace("\\", "/", $system_path));
    require_once BASEPATH.'core/CodeIgniter.php';
    ?>
    

    导入的 CodeIgniter.php 这个文件的作用是,检查环境,将控制权交给框架。

    控制器

    一个MVC的应用,所有的请求都必须经过控制器,所以下面我们来编写一个比较简单的控制器:

    class NowaMagic extends CI_Controller {
    
    	public function index()
    	{
    		echo 'Welcome to www.nowamagic.net';
    	}
    }
    
    • 这个类只需要继承自 CI_Controller 即可,CI_Controller 是 CodeIgniter 的控制器的基类,只要你继承它,你就可以使用框架帮你写好的一系列方法,这样就可以大大减少你自己的工作量了。还有,函数名也是要有意义的,如上面写的这个函数代表的意义就是访问 NowaMagic 这个控制器下面的 index 这个 Action。

    关于模型

    模型是专门用来和数据库打交道的PHP类。例如,假设你想用CodeIgniter来做一个Blog。你可以写一个模型类,里面包含插入、更新、删除Blog数据的方法。

    如何使用模型呢?实际上非常简单。

    class Blog_Model extends CI_Model {
    	function __construct()
        {
            parent::__construct();
        }
    	
    	function insert()
        {
            $this->db->insert('entries', $this);
        }
    }
    

    原理和控制器一样,也是继承框架的类,然后自定义方法,这个地方的方法名没有限制,可以随意。

    那么编写模型之后怎么在控制器中调用呢,其实方法就是在控制器中实例化这个模型类,然后调用相应的方法即可,所以修改刚才这个控制器的类:

    class NowaMagic extends CI_Controller {
    
    	public function index()
    	{
    		$this->load->model('Blog_Model');
    		$this->Blog_Model->insert();
    	}
    }
    

    为什么这里没有 include 语句呢?那是因为框架帮你做完了这一切,当然,框架不是万能的,当你比较熟悉之后,也可以选择不使用自动导入。

    视图层(view)

    刚才我们所做的一切都没有View,那么怎么编写View呢,实际上就是一个HTML文件,框架在View这一层一般是实现标签库,标签库帮你完成一些原来需要用PHP代码才能完成的事情,比如循环遍历,没有标签库可能你就只能在这个View的文件中使用<?php foreach(.....) ?>,这样对于代码分离很不好。

    我们知道所有的请求都必须要通过控制器,所以外部是无法直接访问这个视图文件的。如果要到达某个 view,需要在控制器里面加入一些语句:

    class NowaMagic extends CI_Controller {
    
    	public function index()
    	{
    		echo 'Welcome to www.nowamagic.net';
    		$this->load->view('index');
    	}
    }
    

    好了,这就是 CodeIgniter 的初步入门与大概情况,不是很难吧。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [移动开发] Android加载器Loaders 5 个条目
  2. [运维管理] 路由器与交换机 4 个条目
  3. [移动开发] Android 网络通信框架Volley 1 个条目
  4. [Python程序设计] Django后台管理系统 2 个条目
  5. [移动开发] 从代码角度去认识 Handler 4 个条目
  6. [移动开发] Android里的ContentValues 2 个条目
  7. [C语言程序设计] 结构体基本知识 1 个条目
  8. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
  9. [PHP程序设计] PHP里的引用 5 个条目
  10. [数据结构] 图的定义 1 个条目
  11. [Python程序设计] 标准库:urllib/urllib2 14 个条目
  12. [数据库技术] SQL基础语法 1 个条目
窗口 -- [协会]