当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

20.5CodeIgniter框架应用

9/17/2020 9:31:19 PM 人评论

20.5CodeIgniter框架应用

20.5 CodeIgniter框架应用

从20.4节介绍的4个框架中,本书选择CodeIgniter为例进行讲解。通过前面几小节的内容,读者已经了解到CodeIgniter是一个为用PHP编写Web应用程序的人员提供的工具包。它的目标是实现比从零开始编写代码更快速地开发项目,为此,CodeIgniter提供了一套丰富的类库来满足通常的任务需求,并且提供了一个简单的接口和逻辑结构来调用这些库。CodeIgniter可以将需要完成的任务代码量最小化,这样开发人员就可以把更多的精力放到项目的开发上。另外,CodeIgniter提供了非常完善的文档,读者通过这些文档可以快速学习、理解CodeIgniter,并且可以在开发中高效使用CodeIgniter框架。

20.5.1 CodeIgniter的技术特点介绍

CodeIgniter在设计之初就有其明确的目标,这个目标就是在最小化、最轻量级的开发包中得到最大的执行效率、功能和灵活性。为了这个目标,CodeIgniter在开发过程的每一步都致力于基准测试、重构和简化工作,拒绝加入任何无助于目标的东西。

从技术和架构角度看,CodeIgniter按照下列目标创建。

·动态实例化。在CodeIgniter中,组件的导入和函数的执行只有在被要求的时候才进行,而不是在全局范围。

·松耦合。耦合是指一个系统的组件之间的相关程度。组件互相依赖越少,那么系统的重用性和灵活性就越好。CodeIgniter的目标就是构建一个非常松耦合的系统。

·组件单一性。单一是指组件有一个非常小的专注目标。在CodeIgniter里面,为了达到最大的用途,每个类和它的功能都是高度自治的。

CodeIgniter是基于模型、视图、控制器这一设计模式的,从前面的学习当中,读者了解到该模式将应用程序的逻辑层和表现层进行分离。在实践中,由于表现层从PHP脚本中分离了出来,所以它允许网页中只包含很少的PHP代码。

在CodeIgniter中,模型(Model)代表数据结构,包含取出、插入、更新数据库的这些功能。视图(View)通常是一个网页,但是在CodeIgniter中,一个视图也可以是一个页面片段,如头部、顶部HTML代码片段。它还可以是一个RSS页面,或其他任一页面。控制器(Controller)相当于一个指挥者,或者说是一个“中介”,它负责联系视图和模型以及其他任何处理HTTP请求和产生网页的资源。

20.5.2 安装CodeIgniter

CodeIgniter安装分为如下4个步骤。

(1)解压缩安装包。

(2)把CodeIgniter文件夹和里面的文件部署到服务器,通常,index.php位于应用服务器的根目录。

(3)编辑application/config/config.php文件,设置基本URL。

(4)如果需要使用数据库,编辑application/config/database.php,在这个文件中设置数据库参数。

下面介绍CodeIgniter框架的组织结构。从官方网站下载CodeIgniter框架,解压缩后可以看到最主要的一个目录是system,该目录就是CodeIgniter框架的目录。除此之外,还有一个index.php文件,该文件用来做一些初始化配置,它还起到处理HTTP请求的作用。

20.5.3 CodeIgniter的Controller

在CodeIgniter中,一个Controller就是一个类文件,Controller所属的类和普通的PHP类几乎没有区别,唯一的区别在于Controller类的命名方式,它所采用的命名方式可以使该类和URI关联起来。例如如下URL地址,就说明了这个问题。


www.mysite.com/index.php/news/

当访问到上面这个地址时,CodeIgniter会尝试找一个名叫news.php的控制器(Controller),然后加载它。当一个Controller的名字匹配URI段的第一部分,即news时,它就会被加载。代码20-4演示创建一个简单的Controller类。

代码20-4 使用CodeIgniter的Controller hello.php


     01 <?php
     02 class Hello extends Controller
     03 {
     04     function index()                            //
方法index()
     05     {
     06         echo 'Hello World!';
     07     }
     08 }
     09 ?>

把它保存在application/controllers/目录下,通过浏览器访问地址http://localhost/ch20/index.php/hello,可以看到如图20-4所示的执行结果。

注意 在CodeIgniter中,类名首字母必须大写。

例如如下代码写法就是不正确的。


     <?php
     class hello extends Controller
     {
         //do something
     }
     ?>

【代码解析】代码20-4定义了一个Hello类,它继承自Controller类。Controller类是CodeIgniter控制器基类,所有控制器都从这个类派生。这个例子中用到的方法名是index()。如果URI的第二部分为空,会默认载入“index”方法,也就是说,也可以将地址写成http://localhost/ch20/index.php/hello/index来访问hello.php。

由此可知,URI的第二部分决定调用控制器中的哪个方法,代码20-5演示了在Hello控制器中加入了其他方法。

代码20-5 为Controller添加方法hello.php


     01 <?php
     02 class Hello extends Controller
     03 {
     04     function index()                            //
方法index()
     05     {
     06         echo 'Hello World!';
     07     }
     08     
     09     function saylucky()                         //
添加方法saylucky()
     10     {
     11         echo 'It's time to say "Good Luck"!';
     12     }
     13 }
     14 ?>

【代码解析】 代码第09~13行添加了一个方法saylucky(),此时通过地址http://localhost/ch20/index.php/hello/saylucky访问hello.php可以看到如图20-5所示的效果。

图20-4 Controller的使用

图20-5 为Hello控制器添加方法

如果URI超过两个部分,那么超过的部分将被作为参数传递给相关方法。例如地址www.mysite.com/index.php/products/shoes/sandals/123,URI中的sandals和123将被当作参数传递给products类的方法shoes。代码20-6演示了这种用法,仍然以hello.php为例。

代码20-6 向Controller的方法传递参数hello.php


     01 <?php
     02 class Hello extends Controller
     03 {
     04     function index()                            //
方法index()
     05     {
     06         echo 'Hello World!';
     07     }
     08     
     09     function saylucky()                         //
方法saylucky()
     10     {
     11         echo 'It's time to say "Good Luck"!';
     12     }
     13     
     14     function sayhello($name)                    //
添加带参数的方法sayhello()
     15     {
     16         echo "Hello, $name !";
     17     }
     18 }
     19 ?>

【代码解析】第14~17行创建的sayhello()方法带一个参数,假设为方法sayhello()传递参数“michael”,通过地址http://localhost/ch20/index.php/hello/sayhello/michael访问hello.php,可以看到如图20-6所示的结果。

图20-6 向方法传递参数

20.5.4 CodeIgniter的Model

在CodeIgniter中,Model是专门用来和数据库打交道的PHP类。通常在Model类里包含插入、更新、删除数据的方法。CodeIgniter中的Model类文件存放在application/models/目录下,可以在里面建立子目录。最基本的Model定义代码如下。


     class Model_name extends Model
     {
         function Model_name()
         {
             parent::Model();
         }
     }

其中,Model_name是模型类的名字,类名的首字母必须大写,并且确保自定义的Model类继承了基本Model类。Model类的文件名应该是Model类名的小写版,比如一个Model类是的代码如下。


     class User extends Model
     {
         function User_model()
         {
             parent::Model();
         }
     }

那么该Model类对应的文件名是application/models/user.php。Model通过Controller载入,代码如下。


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

其中,Model_name是要载入的Model类的名字。模型载入后,就可以通过如下代码所示的方法使用。


     $this->load->model('Model_name');
     $this->Model_name->function();

20.5.5 CodeIgniter的View

在CodeIgniter中,从不直接调用视图,视图必须被一个控制器来调用。

(1)使用文本编辑器创建一个名为helloview.php的文件,如代码20-7所示。

代码20-7 视图文件helloview.php


     01 <html>
     02 <head>
     03 <title>Welcome - helloview.php</title>
     04 </head>
     05 <body>
     06 <h1>Hello everyone!</h1>
     07 </body>
     08 </html>

【代码解析】 这是一段简单的HTML代码,只用标题输出一句话。

(2)将该代码保存到application/views/目录下。然后使用某个方法载入该视图文件。这个方法的用法如下。


$this->load->view('name')

(3)这行代码中,name是需要载入的视图文件的名字,文件的后缀名没有必要写出。接下来,在hello控制器的文件hello.php中写入这段用来载入视图的代码,此时完整的hello.php如代码20-8所示。

代码20-8 在Controller中载入视图hello.php


     01 <?php
     02 class Hello extends Controller
     03 {
     04     function index()                            //
方法index()
     05     {
     06         $this->load->view('helloview');
     07     }
     08     
     09     function saylucky()                         //
方法saylucky()
     10     {
     11         echo 'It\'s time to say "Good Luck"!';
     12     }
     13     
     14     function sayhello($name)                    //
带参数的sayhello()
方法
     15     {
     16         echo "Hello, $name !";
     17     }
     18 }
     19 ?>

【代码解析】上述代码创建了3个方法,其中第3个方法带一个参数$name。最重要的是第06行代码,载入前面创建好的helloview视图。

(4)此时再通过地址http://localhost/ch20/index.php/hello浏览hello.php,将看到如图20-7所示的执行结果。

(5)通过这段代码,读者可以了解如何载入一个视图。但视图中经常需要动态数据的内容,下面就介绍如何处理含有动态数据的视图。动态数据通过控制器以一个数组或对象的形式传入视图,这个数组或对象作为视图载入方法的第2个参数,如代码20-9所示。

代码20-9 向视图中添加动态数据hello.php


     01 <?php
     02 class Hello extends Controller
     03 {
     04     function index()                                    //
方法index()
     05     {
     06         $data['title'] = "New Title - Hello.php";
     07         $data['heading'] = "
大家好,欢迎使用CodeIgniter
框架!";
     08         $this->load->view('helloview1',$data); 
     09     }
     10     
     11     function saylucky()                                 //
方法saylucky()
     12     {
     13         echo 'It\'s time to say "Good Luck"!';
     14     }
     15     
     16     function sayhello($name)                            //
带参数的sayhello()
方法
     17     {
     18         echo "Hello, $name !";
     19     }
     20 }
     21 ?>

【代码解析】第06、第07两行定义了数组$data的两个元素,这两个元素分别是页面的标题和页面的文本内容。代码第08行向载入视图的方法view()传入第2个参数,该参数即代码前两行定义的数组。

(6)此时访问hello.php会看到如图20-8所示的执行结果,可以看出,浏览器上的页面标题和页面的heading文字都更换成了动态数据内容。

图20-7 在Controller中载入视图

图20-8 向视图添加动态数据

(7)最后还需要修改helloview.php,在其中添加输出数据的PHP代码,修改后按helloview1.php保存在application/views/目录下,修改后的代码如下。


     01 <html>
     02 <head>
     03 <title><?php echo $title; ?></title>
     04 </head>
     05 <body>
     06 <h1><?php echo $heading; ?></h1>
     07 </body>
     08 </html>

【代码解析】第03行和第06行是有输出数据的PHP代码。

至此,已经向读者介绍了CodeIgniter最简单的用法,离实际应用开发还很远,读者需要通过CodeIgniter提供的手册进一步学习,理解CodeIgniter框架。

相关教程

共有条评论 网友评论

验证码: 看不清楚?