CodeIgniter 入门.docx
《CodeIgniter 入门.docx》由会员分享,可在线阅读,更多相关《CodeIgniter 入门.docx(13页珍藏版)》请在冰豆网上搜索。
CodeIgniter入门
CodeIgniter入门
快速简单地创建MVC应用程序
ThomasMyer,作者、顾问和Web开发人员,TripleDogDareMedia
简介:
创建CodeIgniter应用程序要比您想像中的容易。
我将引导您创建第一个项目:
一个带有联系人表单的简单Web页面。
本文的标签:
codeigniter
标记本文!
发布日期:
2008年9月16日
级别:
中级
其他语言版本:
英文
访问情况 9171次浏览
建议:
0 (添加评论)
平均分(共14个评分)
如果您是一位PHP开发人员,在使用PHP编程语言时不难发现:
大型项目可能会变得复杂。
这并非PHP的缺点。
是的,这种语言提供了丰富的特性,而且具有足够理想的弹性,可区分程序员之间的工作成果。
在这种意义上,PHP类似于Perl,这是一些人喜欢它(而其他人鄙视它)的原因之一。
任何曾经查看过遗留PHP项目的有经验的PHP开发人员都可以轻松判断出不同开发人员在项目不同阶段的工作—就像您是一位考古学家,正在凝视着深深的墓穴,见证着不同文化在各自时代的发展。
不管涉及了什么样式或使用了什么方法,超过几千行代码的PHP项目很容易在仓促之中变得凌乱不堪。
这主要是因为它们在结构上不一致。
一些程序员创建类来组织其工作,但似乎没有任何两个程序员对于如何编写类具有相同的看法。
其他程序员构建大量充满函数的包含文件。
还有其他人使用巨大、独立的库,比如PEAR。
MVC框架如何提供帮助
在几年前,PHP一直缺乏一个良好的、功能完善的模型-视图-控制器(Model-View-Controller,MVC)框架。
MVC框架允许程序员将其代码组织为三个不同的功能区:
∙模型包含与您的数据库和其他数据结构相关的所有代码。
如果您具有一个名为pages的表,则您具有一个模型,其中具有用于从表中选择、创建、更新和删除记录的函数。
∙视图包含所有显示和UI元素—JavaScript代码、CascadingStyleSheets(CSS)、HTML甚至PHP。
∙控制器将一切联系在一起。
控制器中的每个函数表示一个目的地或路线。
如果您具有一个名为/about的目的地,则控制器将具有一个名为about()的函数。
如果以前没有使用过MVC框架,上述三点无法体现出这种组织模式的强大之处。
一旦您开始用MVC思考,您对PHP开发的观点和态度将发生显著变化。
例如,不是在项目的每个可用角落中都塞入数据库查询代码,而是将一切都组织到模型中。
为了从数据库表中选择页面,可以使用页面模型中的函数。
同样地,如果您需要更新特定页面的外观,可以使用视图,而不用与控制器打交道。
与此类似,控制器是为您的应用程序添加目标和其他控制代码的位置;不必在模型中放入任何此类东西。
无论使用哪种MVC框架,在一天之内,您就会意识到您具有一个容易记住、可按需扩展的系统。
如果客户在下周需要更改,没问题—您可以搞定。
如果第二年有什么请求,同样如此。
约定优于配置MVC
在所有MVC框架中,最著名的莫过于RubyonRails。
多年以前,它席卷Web开发领域,满足了所有人的想像。
它并非纯粹的MVC框架,而是一种约定优于配置的MVC框架。
约定优于配置意味着使用Rails时,您需要设置一些关键配置项(例如数据库的位置、特定用户名和路径),其他配置均由智能默认设置处理,您可在随后修改,也可不加修改。
结果不仅仅能得到组织良好的代码,而且还有速度极快、易于使用的Web开发环境。
这都是PHP世界的梦想。
经过一两年之后,许多类似于Rails的工具纷纷出现:
CakePHP、Symfony等等。
了解CodeIgniter
最终,EllisLab的工作人员发布了CodeIgniter。
许多企业尝试体验过所有PHPMVC框架之后,CodeIgniter都成为赢家,主要是由于它为组织提供了足够的自由支持,允许开发人员更迅速地工作。
自由意味着使用CodeIgniter时,您不必以某种方式命名数据库表,也不必根据表命名模型。
这使CodeIgniter成为重构遗留PHP应用程序的理想选择,在此类遗留应用程序中,可能存在需要移植的所有奇怪的结构。
CodeIgniter不需要大量代码(1.6.2版本仅为2.8MB,其中的1.3MB是可以删除的用户文档),也不会要求您插入类似于PEAR的庞大的库。
它在PHP4和PHP5中表现同样良好,允许您创建可移植的应用程序。
最后,您不必使用模板引擎来创建视图—只需沿用旧式的HTML和PHP即可。
至此,我们已经提供了足够的介绍,下面来构建一个简单的项目,看看它的效果。
安装和配置CodeIgniter
在构建任何CodeIgniter新项目时,第一步都是下载最新软件包(在本文撰写时,最新软件包是1.6.2,请参见参考资料小节)。
下载压缩存档文件(.zip)并解压缩之后,您就获得了一个codeigniter_文件夹,其中包括开始创建所必须的一切内容。
在进行一组必需的轻微的配置更改之前,本节将为您简单介绍CodeIgniter,使您熟悉它的基础知识。
文件夹结构
打开CodeIgniter文件夹时,您会看到一个名为system的文件夹。
所有CodeIgniter代码都将存放在这里。
在此文件夹内还有一些文件夹,其中有一个名为application:
您要处理的99.999%的文件都将位于此文件夹内。
该文件夹的命名十分贴切,因为它包含您的应用程序及其所有组成部分—system文件夹的其他部分包括CodeIgniter核心代码和其他不应混淆的文件。
application文件夹下又分为多个文件夹(参见图1)。
大多数文件夹易于理解。
模型存放在models文件夹中、视图存放在views文件夹中、控制器存放在controllers文件夹中,依此类推。
还有一些文件夹用于存储CodeIgniter帮助程序和库的本地扩展,这些内容不在本文讨论范围之内。
图1.CodeIgniter的文件夹结构
就目前而言,system/application文件夹中最重要的文件夹就是config。
该文件夹内有两个需要关注的文件:
config.php和database.php。
config.php文件包含设置CodeIgniter所需的基本参数和自变量。
database.php文件包含连接数据库所需的基本参数和自变量。
就目前而言,对于config.php文件,您只需设置base_url参数,例如设置为http:
//127.0.0.1/CodeIgniter/。
根据您正在使用的服务器地址更改此设置:
$config['base_url']="
务必牢记添加最后的斜杠,即便是在子目录中设置CodeIgniter应用程序时也是如此。
接下来,打开database.php文件,为数据库服务器设置connection参数:
$db['default']['hostname']="your-db-host";
$db['default']['username']="your-username";
$db['default']['password']="your-password";
$db['default']['database']="your-db-name";
$db['default']['dbdriver']="mysql";
就是这样。
您还可以进行其他一些设置(如自动加载首选项和特殊路径),但只要CodeIgniter了解它位于何处且可连接其底层数据库,您就可以放心开始编写代码了。
您的第一个CodeIgniter项目
现在,您已经安装和配置了CodeIgniter,接下来即可构建项目,这项工作至少要占用一个小时的时间。
这一次,我们不会构建HelloWorld应用程序,而是使用CodeIgniter创建一个简单的Web站点。
该站点将有一个主页,显示一些宣传文本和一个表单,该表单将发布到数据库表中。
无需为其外观费心—只需关注对应用程序有用的部分即可。
换句话说,让美工去关心外观—您只要确保一切可以正常工作、迅速完成即可。
按照CodeIgniter的术语,可将这些需求转换为以下内容:
∙一个控制器,仅包含少数功能(可使用默认的Welcome控制器)
∙一个模型(以及一个数据库表),用于存储联系人信息
∙一个主视图,包含一些支持
创建数据库表和模型
从模型入手可帮助您理解底层数据库表,之后再开始布设功能和UI。
如果对表将存储哪些内容认识不深,设计与表交互的表单将十分困难。
对于这个示例应用程序而言,您希望存储的是来自表单的联系人信息。
那么需要的是哪些类型的联系人信息?
目前而言,仅存储基本信息,要求提供姓名、电子邮件地址、电话号码和简短备注。
您还可能希望在后台存储时间戳和IP地址。
MySQL表应如下所示:
CREATETABLE`contacts`(
`id`int(11)NOTNULLauto_increment,
`name`varchar(128)NOTNULL,
`email`varchar(255)NOTNULL,
`notes`textNOTNULL,
`stamp`timestampNOTNULLdefaultCURRENT_TIMESTAMPonupdateCURRENT_TIMESTAMP,
`ipaddress`varchar(32)NOTNULL,
PRIMARYKEY(`id`)
)ENGINE=MyISAM;
现在我们已经有了表,接下来将创建第一个模型。
在system/application/models文件夹内,创建一个mcontacts.php文件。
为什么要将其命名为mcontacts?
这是一种速记形式—文件名中在模型名前加一个m可帮助您记住文件的组织方式,而不必使用更长的前缀或后缀,如model_等。
所有模型都采用相同的方式构造:
classMContactsextendsModel{
functionMContacts(){
parent:
:
Model();
}
}
请注意,类名与文件名匹配,必须为类提供一个构造函数。
换句话说,一个模型就是一个PHP类。
这也就意味着模型中的所有函数实际上都是该类的一个方法。
理解这一点之后,很快就能领悟到,需要具备一个函数,将数据安全地插入联系人数据库表中。
提供此功能的函数如下:
functionaddContact(){
$now=date("Y-m-dH:
i:
s");
$data=array(
'name'=>$this->input->xss_clean($this->input->post('name')),
'email'=>$this->input->xss_clean($this->input->post('email')),
'notes'=>$this->input->xss_clean($this->input->post('notes')),
'ipaddress'=>$this->input->ip_address(),
'stamp'=>$now
);
$this->db->insert('contacts',$data);
}
注意,您获取了POST数组的输出、整理并将其存储在名为contacts的数据库表中。
在此过程中,您使用了多个帮助程序来简化工作。
例如,$this->input->xss_clean()整理表单字段的数据、$this->input->post()简化对这些表单字段的访问、$this->input->ip_address()从用户的浏览器获取IP地址、$this->db->insert()向数据库表添加一条新记录。
在这种上下文中,$this->input->xss_clean()的使用必不可少—您正在处理Web用户输入,那可以是任何内容。
使用xss_clean()函数或许是最基本的应对方法,您可能还要考虑应用更加稳妥的措施。
添加功能来将字段长度缩短到一定大小可能也是一种合理做法。
但就目前而言,xss_clean()例程即可为您提供足够的保护。
您只用了短短几分钟就创建了一个可重用的函数,允许在数据库中存储联系人信息。
现在,我们将转而讨论控制器。
初始化控制器
在CodeIgniter中,控制器用于组织项目。
设想每个函数都是站点或应用程序的一个页面或目标。
如果使用主页,就需要一个index()函数。
如果有一个Aboutup页面,就需要about()或about_us()函数—具体取决于您希望怎样构造URL。
甚至可以将控制器组织到文件夹中,创建层次结构。
例如,在system/application/controllers文件夹中,可能有一个admin文件夹,其中包含针对管理工具各主要部分的控制器。
您可按照如下方法访问这些控制器(和函数):
目前只需使用默认控制器,即Welcome控制器。
它存储在system/application/controllers/文件夹中,名为welcome.php。
打开时,应看到以下内容:
classWelcomeextendsController{
functionWelcome(){
parent:
:
Controller();
}
functionindex(){
$this->load->view('welcome_message');
}
}
如您所见,类名反映了文件名。
这里也有一个构造函数,调用CodeIgniter内核中的父Controller类。
了解这些就够了。
接下来,注意名为index()的启动函数,它将加载welcome_message视图。
在删除此函数并编写您自己的函数之前,有必要注意,此原型index()函数很好地满足了为应用程序的最终用户显示信息的最低要求。
我们继续构建一个新的index()函数。
首先需要加载有用的Form—它能帮助您完成创建联系人表单的繁琐任务。
下面,设置可在视图内部使用的多个变量—通过这种方法,即可更好地组织应用程序。
例如,您可能希望在控制器中设置标题和标题栏。
如果要这样做,就必须将变量载入视图。
所载入的变量之一就是所包含视图的名称。
通过这种方法,即可设置包含所有外观的主视图,以及包含内容的各包含项:
functionindex(){
$this->load->helper('form');
$data['title']="WelcometoourSite";
$data['headline']="Welcome!
";
$data['include']='home';
$this->load->vars($data);
$this->load->view('template');
}
$data数组被传入到一个称为模板的视图(接下来即将构建此视图)。
数组内的信息可使用键名访问,如果希望输出标题栏,通过$headline访问它即可。
接下来,您将创建模板和主页视图(后者只是一个包含项),并完成控制器。
创建视图
您的第一个视图极为简单—这是一个名为template的视图。
我们将尽力保持其简单,展示视图可以有多么灵活。
template视图存储为system/application/views中的template.php,初始形式如下所示:
DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
"http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
//www.w3.org/1999/xhtml"xml:
lang="en"lang="en">