程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 貫徹PHP中的MVC之控制器篇

貫徹PHP中的MVC之控制器篇

編輯:關於PHP編程

The Controller 【控制器】

簡單來講,控制器的作用就是接受請求。它使用獲取的方法,在這裡是通過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 <[email protected]>
  * @copyright Joe Stump <[email protected]>
  * @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 <[email protected]>
  * @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) {
          &nb

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved