2010年4月14日星期三

CodeIgniter框架

CodeIgniter 是一套给 PHP 网站开发者使用的应用程序开发框架和工具包。它提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速地进行项目开发。使用 CodeIgniter 可以减少代码的编写量,并将你的精力投入到项目的创造性开发上。


开始|begin

CodeIgniter是EllisLab针对PHP开发动态站点开发的开源Web应用程序框架。
类似于Ruby on Rails,CI为开发者提供了基于MVC的架构模式,并提供了一组丰富的标准库。
这对于组织复杂的应用,以及应用的快速开发都有很大的帮助。
CI本身定位于小巧优雅,它有清晰的文档,而没有限制的编码规则。
也有一个社区分支叫Kohana,是个严格基于PHP5的OO框架,并有一些较大胆地实用增强。

首先,列出以下用到的参考文档和教程
CodeIgniter用户指南 http://codeigniter.org.cn/user_guide/index.html
CodeIgniter入门 http://www.ibm.com/developerworks/cn/web/wa-codeigniter/
20分钟创建一个博客(视频) http://codeigniter.org.cn/tutorials/watch/blog
《CodeIgniter for Rapid PHP Application Development》
本文的目的也仅仅是传递对《用户指南》的一的大体印象,并假设已经有了对类似的框架的了解。

在解开从CI官方下载的压缩包,其中system目录和index.php文件就是我们所要的程序了。如果把他们放在xampp的htdocs目录下,就可以通过http://localhost/来浏览了一下效果了。
将关注转向其中的application目录,这里已经为不同的用处划分了子目录了,包括config|models|views|controllers|...。站点的修改与开发就将在这里进行。
例如这里需要找到config/config.php文件,找到base_url设置,并修改
$config['base_url'] = "http://localhost/";
下面将要并行的展开若干关注点

路由|route

对站点的访问从一个URI开始。
如果没有用rewrite重定向掉index.php的话,对于http://example.com/index.php/news/article/my_article
参考默认控制器 controllers/welcome.php:
class Welcome extends Controller {
function Welcome()
{
parent::Controller();
}
function index()
{
$this->load->view('welcome_message');
}
}
(文件名小写,类名首字母大写,两者一致)
将是对News的实例调用article("my_article");。
这里用到了View,它调用的是views目录下对应的php文件。
在View中可以使用例如,$title由view方法的第二个哈希数组形参数传入。
而如果要生成一个链接的话,可用
echo anchor('news/local/123', 'My News');
。它属于URL辅助函数(helpers),所以需要调用
$this->load->helper('url');
,可以放在使用前,构造函数中,或者在配置文件设置自动装载。
类库(library)则是
$this->load->model('display');
,然后使用$this->display对象。
这里涉及文件名的操作允许多级目录。

数据库|db

相关配置在config/database.php,比如通常是指定我们创建好的MySql数据库。虽然也可用CI提供的操作,不过一般已可先用phpmyadmin等工具设计好数据库表格。在使用前调用
$this->load->database();
,或者使用自动加载。
CI提供了数据库类,对数据库的操作都可以通过$this->db对象进行的query。同时CI也提供了Active Record 模式,可通过方法调用的形式生成SQL查询,例如
$query = $this->db->get('mytable');
// Produces: SELECT * FROM mytable
。这样可以简化SQL的书写,封装数据库间差异。
对于一组数据库操作,可以创建一个模型Model来表示站点的数据结构。例如创建models/user_model.php:
class User_model extends Model {

function User_model()
{
parent::Model();
}
}
(命名约定同Controller)
使用则按照
$this->load->model('Model_name');
$this->Model_name->function();

对数据库的操作定义为模型类的成员方法。同时也可定义数据成员
var $title = '';
var $content = '';
var $date = '';
,把$this当作一个hash数组使用。

其他|other

$this->input提供了xss_clean()post()cookie()等方法,用于安全的获得输入。
跟踪用户状态的会话机制,CI提供了PHP本身之外的Session类。
对通过view文件的输出,Codeigniter提供了缓存技术的支持。
CI的提供了plugins插件机制,官方Wiki上能找到一些可用的。
测试所编写的应用会用到:基准测试类,以及单元测试类。
创建表单用到的了,表单辅助函数,以及表单验证。
CRUD与REST,前者是基本的数据造作,后者是一种设计风格。
Ajax可以结合jQuery使用,以获得无刷新装载的体验效果。
自带类库和辅助函数在用户指南中有详尽的列表和用法说明。
CI有i18n支持,不过不自带ORM和访问角色控制的实现。
像Drupal那种CMS通常也是可当框架来用的,而且相比插件更丰富些。

结束|end

就先上面这些了。
http://en.wikipedia.org/wiki/Category:Web_application_frameworks

没有评论: