`
yunnysunny
  • 浏览: 19133 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

codeigniter和mvc续

 
阅读更多

 

codeigniter的程序流程

1.      设计视图

首先,让我们设计视图并把它保存到如下路径:system/application/views/testview.php

  1. <html>  
  2. <head>  
  3.   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.   <html xmlns="http:////www.w3.org/1999/xhtml">  
  5.   <title>Web test Site</title>   
  6. </head>  
  7. <body>  
  8.   <h1><?php echo $mytitle; ?> </h1>  
  9.   <p class="test"> <?php echo $mytext; ?> </p>  
  10. </body>  
  11. </html>  
  代码片段1 视图demo

       

        你还可以联想到,变量$mytitle$mytext的内容呢?答案是我们需要一个新的控制器!

 

2.       设计控制器

现在,我们需要一个新的控制器。我们将其命名为Start并保存在:/system/application/controllers/start.php

该控制器必须做几件事:

·         调用视图

·         把一些数据传递给视图:它正在期待标题($mytitle)和一些本文($mytext

·         最后,我们想要控制器接受来自使用者的一个参数(例如通过URL请求)

  1. <?php
  2. class Start extends CI_Controller {
  3. function __construct()
  4. {
  5.       parent::__construct();
  6. }
代码片段2 控制器构造函数

       在上面的代码中可以看出Start是一个构造函数,他完成了控制器的初始化。

      下面是将参数传递个一个函数的代码:

  1. function hello($name)  
  2. {  
  3.     $data['mytitle'] = 'Welcome to this site';  
  4.     $data['mytext'] = "Hello, $name, now we're getting dynamic!";  
  5.     $this->load->view('testview'$data);  
  6. }  
  7. ?>  
 代码片段3 控制器url映射函数


    这个函数期待一个参数,$name,可能会产生疑问$name变量从哪来?其实它需要来自URL请求的第三个参数,话句话说换句话说,当你输入URL

http://www.mysite.com/index.php/start/hello/fred

URL的最后一段作为一个参数传给函数hello,倒数第二个参数是指当前的函数名是hello,倒数第三个函数是指当前的控制器名字是start。当然我们还会看到index.php这个参数,这是由于CI将所有的请求都发送到了index.php文件中,你也可以用.htaccess文件重写URL来去掉index.php,考虑到服务器可能不支持.htaccess,我们没有做出修改。

    再回到对控制器的讨论中,注意hello()函数如何先设置一个名为$data的数组,并把一些对象的属性及文本读入数组。然后它通过名称装载视图,并把刚生成的$data数组作为第二个参数。在幕后,CI很好地利用了另外一个PHP函数:extract(),这个函数的作用是把数组中的元素取出放入变量表,其中每个键值对中的键名即为变量名,对应该键名的值为变量的值。因此我们刚才定义的$data数组在视图中转换成一个单一的变量:$text(等于“Hello, $name, now we're getting dynamic”)。

    换句话说,当它被建立的时候,$data数组看起来像这样:

    Array

  [mytitle] => 'Welcome to this site',

  [mytext] => "Hello, fred, now we're getting dynamic!"

);

    但是当它被传递给视图的过程中,它被解开,并且下列变量在视图对象中生成,与$data的每个键/值相对应:     

    $mytitle   =   'Welcome to this site';

     $mytext    =   "Hello, fred, now we're getting dynamic!";

    虽然你只传送一个变量到视图中,但是,你能把许多数据装进那个变量中。$data数组的每个值还可以是数组,这被称为多维数组,因此,用一个数组变量可以把大量的变量传递给视图。

 

    3.设计模型

       其实模型的设计要在控制器之前完成的,但是为了演示控制器和视图之间的数据流动,我们把控制器和视图放到一起说了。

       所以说上面介绍的只是VC,因为还没介绍到M,也就是模型。下面构造一个MVC的完整流程。

       在第二部分介绍控制器时给数组$data的元素赋值时,我们用到的都是常量,其实在实际的编码情况中,我们的数据都是从数据库中读出的,这份工作就是下面要说到的控制器的职责。先看下面一部分代码:     

  1. <?php  
  2.      class Art extends CI_Model {  
  3.             public function __construct() {  
  4.                    parent::__construct();  
  5.                    //$this->load->library('database');//在autoload.php中配置了自动加载database类  
  6.             }  
  7.             public function getList($name) {  
  8.                    $this->db->select('title,content'); 
  9.    if (!is_null($name)) { 
  10.                     $this->db->where('author'$name);  
  11.    }
  12.                    $result=$this->db->get('art');  
  13.                    return $result->num_rows()>0 ? $result->result_array() : null;  
  14.             }  
  15.   
  16.   
  17.      }  
  18. ?>  
代码片段4 模型demo

 

      首先我们看到这也是一个类,继承自父类Model,首先由__construct函数完成该类的初始化。并加载了CI的数据库类(也就是我们前面所有的AR)。然后我们看类中的getOne函数,这是要介绍的重点。

      $this->db->select(‘title,content’);

      $this->db->where(‘author’,$name);

      $result=$this->db->get(‘art’);

这三句话放到普通的php中应该是这么写的:

$sql=”select title,content from art where author =’“.$name.”’”;

$result=mysql_query($sql);  

 

可以看出用了AR后数据库的处理变得简洁明了,并且更重要的是CIAR生成隐含的代码,在幕后进行转意和类型转化,使代码更加健壮。

      我们在模型中将数据进行处理(查询、修改、删除等),然后将处理结果交给控制器处理。控制器在这里起到了路由的作用,它会将处理的结果交给不同的视图去处理。

在控制器中我们这么取出数据:

      

  1. <?php  
  2. class Artmanager extends CI_Controller {  
  3.     function __construct() {  
  4.         parent::__construct();  
  5.         $this->load->model('art');  
  6.     }  
  7.   
  8.     function index($authName) { 
  9. //$this->load->library('unit_test'); 
  10.         $list = $this->art->getList($authName);  
  11.         $data['list'] = $list;  
  12.         $this->load->view('art_list',$data); 
  13. //$this->output->enable_profiler(TRUE); 
  14.     }  
  15. }  
代码片段5 控制器中使用模型

        注意以下两句是整段代码的重点,这两句扼要的指出了在控制器中怎样使用模型。 
       
  1. $this->load->model('art');               
  2. $list = $this->art->getList($authName);  
  1. 最后一句使用来加载视图的:      
  1.    $this->load->view('art_list',$data);     
  1. 使用这一句将$data数组中的数据传递到art_list.php(文件存放位置稍后给出)这个文件中。现在看一下art_list.php文件到底怎样操作来展现这个视图的内容:  
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5.     <title>文章列表</title>  
  6.     <base href="<?php echo base_url();?>" />
  7.     <meta name="keywords" content="" />  
  8.     <meta name="description" content="" />  
  9.     <link href="css/index.css" rel="stylesheet" type="text/css" />
  10. </head>  
  11.   
  12. <body>  
  13.     <table class="list">  
  14.         <tr>  
  15.             <th></th><th>标题</th><th>内容</th>  
  16.         </tr>  
  17.   
  18.     <?php  
  19.         if (is_null($list)) {  
  20.     ?>  
  21.         <tr><td colspan="3">没有数据</td></tr>  
  22.     <?php  
  23.         } else {  
  24.             foreach ($list as $index=>$article) {  
  25.     ?>  
  26.                 <tr>  
  27.                     <td><?php echo $index+1;?></td>  
  28.                     <td><?php echo $article['title']?></td>  
  29.                     <td><?php echo $article['content']?></td>  
  30.                 </tr>  
  31.     <?php  
  32.             }  
  33.         }  
  34.     ?>  
  35.   
  36.     </table>  
  37. </body>  
  38. </html>  

代码片段6 视图中解析控制器中的参数
    注意代码片段6中的:  
  1. foreach ($list as $index=>$article)  
        这一句,如果你没有记错的话,从控制器里传递过来的参数$data是一个数组,但是这里面的变量$list看上去像是没有定义过的。恭喜你,猜的没错了,CI内部就是调用了extract这个函数将$data数组中的元素拆分到以键名为变量名的变量中去了,所以你在这里可以直接使用$list这个变量。
       最后看一下成果,在浏览器里直接输入http://localhost/ci/index.php/artmanager/index/admin 这个地址,会显示查询的表格数据:
       
4.备注

为了让上述代码能够正确的运行起来,还需要做一些响应的配置。首先,在application/config/database.php中配置数据库连接:

 

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'mycms';

 然后在application/config/autoload.php中定义自动加载的类库,修改一下里面的相应代码就可以了:

 

/*
| -------------------------------------------------------------------
|  Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
|
| Prototype:
|
|	$autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/

$autoload['libraries'] = array('database', 'session');


/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['helper'] = array('url', 'file');
*/

$autoload['helper'] = array('url');
 

  虽然这篇教程中没有用到session,但是按照我的惯例,我还是把他配置上了。如果你在运行的时候,出现了如下提示:

 

An Error Was Encountered

In order to use the Session class you are required to set an encryption key in your config file.

那么修改一下application/config/autoload.php中的encryption_key元素即可,随便输入几个字符:

 

/*
|--------------------------------------------------------------------------
| Encryption Key
|--------------------------------------------------------------------------
|
| If you use the Encryption class or the Session class you
| MUST set an encryption key.  See the user guide for info.
|
*/
$config['encryption_key'] = 'FSJFEO@¥#%)#(¥02334';
 

注:以上内容改编自《codeigniter敏捷开发框架》中的部分内容。详细代码以及数据库文件,见附件。

本教程基于ci2.x编写,基于1.x的教程可参见我的csdn博客http://blog.csdn.net/yunnysunny/article/details/6214171

 

分享到:
评论

相关推荐

    PacktPub.Programming.with.CodeIgniter.MVC.Sep.2013

    MVC模式是一种常用的设计模式,将业务逻辑、数据和用户界面分离,使代码更加模块化,易于维护和扩展。Model负责处理数据模型,View负责展示数据,Controller作为两者之间的桥梁,协调交互。 在PHP环境中,...

    CodeIgniter(PHP MVC开源框架)v3.1.10.zip

    CodeIgniter简介 CodeIgniter 是一个小巧但功能强大的 PHP 框架,作为一个简单而“优雅”的工具包,它可以为 PHP 程序员建立功能完善的 Web 应用程序。如果你是一个使用共享主机,并且为客户所要求的期限而烦恼的...

    CodeIgniter是一个简单快速的PHPMVC框架

    作为一款轻量级的MVC(Model-View-Controller)框架,CodeIgniter强调了代码简洁和开发效率,使得开发者可以更加专注于业务逻辑,而不是底层基础设施的实现。 在MVC模式下,CodeIgniter将应用程序分为三个主要部分...

    基于MVC模式的PHP开发框架CodeIgniter.pdf

    基于MVC模式的PHP开发框架CodeIgniter 在软件开发中,MVC模式是一个非常流行的架构模式,它可以将应用程序分成三个...通过本文,读者可以了解到MVC模式和CodeIgniter框架的基本概念和应用,提高自己的开发技能和知识。

    CodeIgniter

    - **轻量级**:由于其精简的核心库和高效的性能,CodeIgniter能够快速加载和执行,适合小到中型项目。 - **低学习曲线**:它的API设计简单直观,使得开发者可以快速上手。 - **强大的安全功能**:CodeIgniter提供...

    辛星Codeigniter教程(2016版)

    再看mvc章节则深入探讨了MVC模式的细节,包括每个部分的作用,如何在Codeigniter中实现MVC模式,以及如何通过MVC模式组织应用程序结构。 在学习过程中,我们还可以通过官方提供的资源来获取更多的信息。辛星在教程...

    基于PHP和Ajax的域名查询系统毕业设计,前端 Bootstrap 和 jQuery,后端CodeIgniter,系统MVC

    前端框架使用 Bootstrap 和 jQuery,后端框架使用 CodeIgniter。系统采用 MVC 模式进行开发,具有良好的代码结构和可维护性。 ## 系统功能 1. 域名查询:用户可以通过输入域名进行查询,系统将自动获取 Whois 信息...

    PHP敏捷开发CodeIgniter框架

    1. **MVC架构**:CodeIgniter通过MVC模式组织代码,使得业务逻辑、数据处理和用户界面分离开来。模型负责与数据库交互,视图负责展示数据,控制器作为两者之间的桥梁,协调请求和响应。 2. **安装与配置**:安装...

    CodeIgniter php mvc框架 中国网站

    欢迎使用 CodeIgniter CodeIgniter 是一套给 PHP 网站开发者使用的应用程序开发框架和工具包。它提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速地进行项目开发。使用 CodeIgn

    CodeIgniter1.7敏捷框架开发

    - **框架特性详解**:书中详细解释了CodeIgniter1.7的主要组件和特性,如路由、控制器、模型、视图、库、助手函数等,帮助开发者深入了解框架的工作原理。 - **实战项目指导**:通过实际项目案例,展示了如何运用...

    codeigniter的简单示例

    在这个"codeigniter的简单示例"中,我们将深入探讨CodeIgniter的核心概念和基本用法。 1. **MVC架构**: MVC是软件设计中的一个经典模式,用于分离业务逻辑、数据处理和用户界面。在CodeIgniter中,模型(Model)...

    PHP开发框架CodeIgniter中文参考资料

    1. **CodeIgniter中文参考手册.pdf**:这份文档详细地介绍了CodeIgniter的各种组件和功能,包括控制器、模型、视图、数据库操作、表单验证、安全和会话管理等。它为开发者提供了一个全面的API参考,帮助他们理解和...

    codeigniter 新闻发布系统下

    这个"新闻发布系统"是基于CodeIgniter框架构建的,旨在帮助用户理解和掌握Model-View-Controller(MVC)设计模式。下面将详细介绍CodeIgniter、CI框架的核心特性以及在MVC模式下的开发实践。 首先,CodeIgniter(CI...

    codeigniter仿芒果平台开发时的MVC程序保存zip程序压缩包

    codeigniter仿芒果平台开发时的MVC程序保存zip程序压缩包是以前仿照芒果平台样式基于codeigniter3做的一个购物网站开发,这里只保存了MVC程序,其它的框架程序未保存在此。另外也无文档,不保证对你的开发能起到多大...

    codeigniter框架

    MVC是一种设计模式,它将业务逻辑、数据和用户界面分离,使得开发过程更加模块化,提高了代码的可维护性和可重用性。 **MVC模式详解:** - **模型(Model)**:模型是应用程序中用于处理数据和业务逻辑的部分。它与...

    CodeIgniter 中文手册1.6.3版本

    1. MVC架构:MVC(Model-View-Controller)是CodeIgniter的核心设计模式。Model负责数据的处理和业务逻辑,View负责展示数据,而Controller作为中间人协调Model和View的交互。了解这一架构有助于提高代码组织和可...

    CodeIgniter php开发MVC框架 v3.1.8

    7. **错误处理和日志**:CodeIgniter具有强大的错误处理机制,能够捕获和记录运行时的错误和异常,便于调试和优化。 8. **性能优化**:由于其轻量级的特性,CodeIgniter在性能上表现优秀。它支持缓存机制,可以通过...

Global site tag (gtag.js) - Google Analytics