理解PHP中的MVC编程之控制器

编程|控制

    简单来讲,控制器的作用就是接受请求。它使用获取的方法,在这里是通过URI,载入一个功能模块来刷新或者提交一个表述层。控制器将使用$_GET自动全局变量来判断载入哪一个模块。

  一个请求的例子,看起来像这样:

  http://example.com/index.php?module=login

  这看起来很简单,但是在实现的过程中却不是。这里是几个控制器能识别的argument部分:

  module定义了使用哪一个模块,如users模块
  class定义了使用哪一个功能类,如你想让用户login还是logout
  event定义了使用哪一个具体事件

  这样一个更复杂的例子可以解释上面的各个argument最终组成的请求URL:

  http://example.com/index.php?module=users&class=login

  这段请求告诉控制器应该载入users模块,然后是login类,最后因为没有定义具体事件,所以运行login::__default()默认事件。

  以下是具体代码部分:

<?php
 /**
  * index.php
  *
  * @author Joe Stump <joe@joestump.net>
  * @copyright Joe Stump <joe@joestump.net>
  * @license http://www.opensource.org/licenses/gpl-license.php
  * @package Framework
 */

 require_once('config.php');

 // {{{ __autoload($class)
 /**
  * __autoload
  *
  * Autoload is ran by PHP when it can't find a class it is trying to load.
  * By naming our classes intelligently we should be able to load most classes
  * dynamically.
  *
  * @author Joe Stump <joe@joestump.net>
  * @param string $class Class name we're trying to load
  * @return void
  * @package Framework
 */

 function __autoload($class)
 {
  $file = str_replace('_','/',substr($class,2)).'.php';
  require_once(FR_BASE_PATH.'/includes/'.$file);
 }
 // }}}

 if (isset($_GET['module'])) {
  $module = $_GET['module'];
  if (isset($_GET['event'])) {
   $event = $_GET['event'];
  } else {
   $event = '__default';
  }

 if (isset($_GET['class'])) {
  $class = $_GET['class'];
 } else {
  $class = $module;
 }

 $classFile = FR_BASE_PATH.'/modules/'.$module.'/'.$class.'.php';
 if (file_exists($classFile)) {
  require_once($classFile);
  if (class_exists($class)) {
   try {
    $instance = new $class();
    if (!FR_Module::isValid($instance)) {
     die("Requested module is not a valid framework module!");
    }

    $instance->moduleName = $module;
    if ($instance->authenticate()) {
     try {
      $result = $instance->$event();
      if (!PEAR::isError($result)) {
       $presenter = FR_Presenter::factory($instance->presenter,$instance);

      if (!PEAR::isError($presenter)) {
       $presenter->display();
      } else {
       die($presenter->getMessage());
      }
     }
    } catch (Exception $error) {
     die($error->getMessage());
    }
   } else {
    die("You do not have access to the requested page!");
   }
  } catch (Exception $error) {
   die($error->getMessage());
  }
 } else {
  die("An valid module for your request was not found");
 }
 } else {
  die("Could not find: $classFile");
 }
 } else {
  die("A valid module was not specified");
}

?>

[1] [2] 下一页  

时间: 2024-09-17 04:25:11

理解PHP中的MVC编程之控制器的相关文章

浅析PHP程序设计中的MVC编程思想_php技巧

PHP的MVC编程思想目前已经被广泛使用于各种大型项目的开发,很多成熟的MVC框架也逐渐被大家所熟知并被广泛应用于各类项目中,比较常见的如ThinkPHP.codeigniter.Symfony.yii.cakePHP等等.本文就来简述一下php的MVC程序设计思想. 一.什么是MVC 简单的说就是将网站源码分类.分层. MVC三个字母的含义:M:Model 模型,负责数据库操作.V:View 视图,负责调用Model调取数据,再调用模板,展示出最终效果.C:Controller 控制器,程序的

理解javascript中的MVC模式_javascript技巧

MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程序的业务逻辑相关的数据以及对数据处理的方法.模型有对数据直接访问的权利.模型不依赖 "视图" 和 "控制器", 也就是说 模型它不关心页面如何显示及如何被操作. 视图:视图层最主要的是监听模型层上的数据改变,并且实时的更新html页面.当然也包括一些事件的注册或者ajax请求操作(发布事件),都是放在视图

理解PHP中的MVC编程之MVC框架简介

编程     [什么是MVC?] MVC是一个可以让你把"三个部分(即MVC的全称,Model.View.Controller)"谐调地组成一个复杂应用程序的概念.一辆汽车就是一个在现实生活中非常好的MVC例子.我们看车都看两个View(显示)部分:内部和外部.而这两个都离不开一个Controller(控制者):司机.刹车系统.方向盘和其他操控系统代表了Model(模型):他们从司机(Controller)那里取得控制方法然后应用到内部和外观(View). [网络上的MVC] MVC框

java编程思想-如何更好的理解java中的面向对象

问题描述 如何更好的理解java中的面向对象 现在学到java的面向对象,有时候会把很多知识点弄混乱,怎么样才能把面向对象的知识点梳理好啊 解决方案 万物皆对象!!!你可以这样理解,面向对象的思想主要是让我们程序员更好的理解编程,因为和机器交流语法比较难懂,所有为了让编程更简单人们就提出了面向对象的思想.就是我们将任何一个东西都可以想象成一个有血有肉的.比如一本书.我们可以知道书可以有书名,可以页数,可以有类容等等这就是我们所说的属性,书可能还有翻页等这些动作这就相当于方法(有些语言叫做函数)了

学习php过程中发现mvc控制器要写几个页面

问题描述 学习php过程中发现mvc控制器要写几个页面 零基础看视频自学中 看到老师讲mvc模式控制器 说写到一个界面最好 可是我发现如果把insert和update写到一个界面里的话 每次update的时候就要insert一下如果定义不同的post值的话又会报错 难道要用if判断一下是否有这个值吗 那样的话不是又比较臃肿了吗 请问各位是怎么解决的 还是要多写几个页面每个页面控制一下的好? 解决方案 写在一个页面是一个偷懒的办法, 在正式的项目中不建议这么做,虽然有判断可以区分,但是容易出错.

ASP.NET中MVC从后台控制器传递数据到前台视图的方式_实用技巧

本文实例讲述了ASP.NET中MVC从后台控制器传递数据到前台视图的方式.分享给大家供大家参考.具体分析如下: 数据存储模型Model: 复制代码 代码如下: public class CalendarEvent { public string id { get; set; } public DateTime start { get; set; } public DateTime end { get; set; } public string backgroundColor { get; set

使用Agavi进行MVC编程简介,第4部分

使用Agavi进行MVC编程简介,第4部分: 创建一个带有多种输出类型(XML.RSS 或SOAP)的Agavi搜索引擎 简介 在本系列的第 3 部分中,您经历了构建基于 Web 的应用程序时经常遇到的一个任务:实现一个允许管理员通过 Web 界面执行 CRUD 操作的管理模块.您还探索了 Agavi 的安全模型,构建了用于验证用户的登录系统,以保护对应用程序资源的访问. 现在继续 Agavi 学习,为这个 WASP(Web 汽车销售平台)示例应用程序添加更多功能.您将实现一个搜索引擎,允许用户

使用Agavi进行MVC编程简介,第2部分 (一)

使用Agavi 进行MVC编程简介,第2部分: 使用Agavi和Doctrine添加表单和数据库支持1 简介 在本系列的第 1 部分中,我介绍了Agavi并解释了一些特性,这些特性让 Agavi 适合用于构建可扩展.遵从标准的Web应用程序.通过使用样例应用程序 Web Automobiles Sales Platform (WASP),我逐步向您展示了创建新的Agavi 项目的基础知识,帮助您理解 Agavi 推荐的文件系统布局,并熟悉 Agavi 的命令行构建脚本.我还介绍了所有 Agavi

MonoTouch中的MVC简介

在我们的第一篇文章中,用MonoTouch在iPhone上创建了一个应用程序.我们用到了outlet和action,了解了基本的应用程序结构,并创建了一个简单的用户界面.在这篇文章中,我们将要创建另外一个简单的应用程序,不过这次要学习下如何使用Views(视图)和View Controllers(视图控制器)来创建一个具有多个界面的应用程序.特别地,我们将使用UINavigationController来在应用程序里的两个界面间进行导航. 在开始构建应用程序之前,让我们简单熟悉下iPhone应用