日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:33日期:2024-02-05 17:53:41

簡單來講,控制器的作用就是接受請求。它使用獲取的方法,在這里是通過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');}

?>;

接下來是以上代碼具體的注釋:

載入“config.php”

定義__autoload()函數。這是PHP5里面的一個新函數,方便動態地載入各個類。

如果一個argument被定義,那么載入相關的模塊、類和具體事件

接下來就是一些判斷以及錯誤的具體操作

最后一切無誤后就載入表述層

【友好URL】

如果你覺得上面例子講到的請求URL讓你覺得不舒服的話,那么就用mod_rewrite來實現友好URL吧。接下來是作者給這個框架寫的實際重寫標準代碼:

RewriteEngine On

# Change the URI here to whatever you want your homepage to be

RewriteRule ^/$ /index.php?module=welcome [L,QSA]

# Changes /index.php?module=welcome to /welcome

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f

RewriteRule ^/([^/]*)$ /index.php?module=$1 [L,QSA]

# Changes /index.php?module=users&class=login to /users/login

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f

RewriteRule ^/([^/]*)/([^/]*)$ /index.php?module=$1&class=$2 [L,QSA]

# Changes /index.php?module=users&class=login&event=foo

# to /users/login/foo.html

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f

RewriteRule ^/([^/]*)/([^/]*)/([^/]*).html$

/index.php?module=$1&class=$2&event=$3 [L,QSA]

Extending the Controller

【擴展控制器】

擁有一個集中控制器的一點好處就是你加入一些功能后,馬上就能通過控制器體現出來。以下是幾個可以擴展一下這個控制器的點子,使這個框架的整體能力更加強大: 你可以使用PHP5里一個新東西SoapServer來自動檢測一個請求是否為SOAP

你可以使用控制器來過濾所有的自動全局變量如$_GET和$_POST以防止惡意HTML代碼等

你可以使用控制器即時地轉換表述層,比如從默認的方式轉到PDF方式

你可以直接在控制器中加入緩存機制,這樣的好處是應用程序整體都能使用到緩存以提高效率

當然,需要注意一點的是,你在控制器中所增加的功能將體現在程序全局。如你想過濾所有的自動全局變量,但是很多應用程序的管理員需要使用到一些HTML代碼,反而成為一件棘手的事情(譯者注:本人的想法是可以加一個if條件語句,在加載特定模塊時不應用過濾功能即可)。

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品一区三区三区在线观看| 久久久精品国产**网站| 国产一区二区三区四区大秀| 麻豆精品一区二区综合av| 国产麻豆精品| 精品中文在线| 一区二区三区四区日本视频| 日本精品不卡| 精品一区三区| 视频一区二区欧美| 日本在线不卡视频| 国产精品亚洲二区| 精品国产亚洲日本| 欧美成人基地| 日韩中文字幕亚洲一区二区va在线 | 亚洲精品永久免费视频| 中文字幕在线免费观看视频| 91精品在线观看国产| 亚洲激情不卡| 日本不卡视频在线| 久久午夜影院| 久久精品123| 亚洲在线网站| 国产欧美午夜| 精品欧美一区二区三区在线观看| 99在线精品视频在线观看| 亚洲开心激情| 久久在线91| 秋霞影院一区二区三区| 99国产一区| 国产亚洲第一伦理第一区| 国产精品国产一区| 在线一区视频| 国产精品一卡| 国产综合婷婷| 国产亚洲字幕| 999精品色在线播放| 亚洲精品婷婷| 国产第一亚洲| 蜜臀精品一区二区三区在线观看| 国产九九精品| 欧美中文一区二区| 欧美日韩va| 新版的欧美在线视频| 日韩精品一二三| 蜜桃精品视频| 午夜亚洲精品| 精品99在线| 免费在线观看精品| 久久一区亚洲| 免费观看日韩电影| 国内精品麻豆美女在线播放视频| 99在线|亚洲一区二区| 久久久国产精品入口麻豆| 欧美在线亚洲| 国际精品欧美精品| 亚洲午夜免费| 精品欧美一区二区三区在线观看| 一区二区国产在线| 97精品视频在线看| 日本麻豆一区二区三区视频| 欧美成人精品三级网站| 欧美日韩一区自拍| 一区免费视频| 久久精品国产亚洲aⅴ| 老鸭窝毛片一区二区三区| 精品欧美日韩精品| 日韩中出av| 欧美另类综合| 精品精品99| 91精品美女| 午夜亚洲一区| 日本综合字幕| 国产精品主播在线观看| 亚洲欧美日韩精品一区二区 | 国产免费播放一区二区| 9久re热视频在线精品| 国产在线看片免费视频在线观看| 日韩avvvv在线播放| 欧美日韩黑人| 在线观看精品| 成人在线免费观看网站| 日韩国产在线观看| 夜夜嗨网站十八久久 | 亚洲国产不卡| 欧美激情另类| 欧美成人精品一级| 欧美啪啪一区| 日韩精品高清不卡| 亚洲一区二区毛片| 国产一区二区三区自拍| 丁香六月综合| 国产一区二区三区不卡av| 国产精品一区二区精品视频观看| 亚洲精品进入| 中文一区一区三区免费在线观| 亚洲第一区色| 久久久人人人| 播放一区二区| 国产成人精品亚洲日本在线观看| 欧美国产日本| 国产毛片精品| 欧美一区二区三区久久| 亚洲一区二区三区久久久| 91久久在线| 亚洲激情精品| 制服诱惑一区二区| 亚洲精品a级片| 91九色精品| 一区在线视频观看| 亚洲欧美日韩国产一区| 免费日韩av| 夜夜嗨一区二区三区| 国产日韩欧美一区在线| 在线看片一区| 亚洲欧洲一区二区天堂久久| 国产精品不卡| 四虎884aa成人精品最新| 91高清一区| 久久不见久久见中文字幕免费 | 亚洲天堂成人| av综合电影网站| 香蕉成人av| 999国产精品永久免费视频app| 久久久久91| 亚洲大全视频| 先锋亚洲精品| 四虎在线精品| 国产欧美一区二区色老头| 日韩一区精品视频| 少妇精品久久久一区二区| 日韩免费精品| 欧美日本久久| 国产一区二区视频在线看| av资源亚洲| 伊人影院久久| 亚洲1区在线观看| 国产精品videossex久久发布| 国内自拍视频一区二区三区| 日韩在线不卡| 国产亚洲亚洲| 日本中文字幕一区二区视频 | 蜜桃av.网站在线观看| 欧美手机在线| 日韩在线卡一卡二| 国产私拍福利精品视频二区| 精品国产鲁一鲁****| 久久夜夜操妹子| 亚洲在线网站| 国产精品久久久久久久久久齐齐| 日韩.com| 国产精品毛片| 国产精品调教| 久久久久网站| 深夜福利亚洲| 日韩成人精品一区二区| 国产伊人精品| 午夜电影一区| 国产传媒在线观看| 夜久久久久久| 国产精品自拍区| 99久久久久国产精品| 免费黄网站欧美| 久久精品国产久精国产爱| 波多野结衣久久精品| 石原莉奈在线亚洲三区| 麻豆精品蜜桃视频网站| 亚洲性视频h| 久久精品72免费观看| 日韩在线观看不卡| 日韩制服丝袜先锋影音| 国产精品二区影院| 亚洲大片在线| 国产精品色在线网站| 久久久久久久久久久9不雅视频| 亚洲精品乱码| 日韩深夜视频| 日本欧美一区二区在线观看| 日韩在线第七页| 婷婷精品在线| 三级小说欧洲区亚洲区| 日韩在线观看中文字幕| 久久久久免费| 亚洲欧洲免费| 欧美成a人免费观看久久| 日韩精品视频网站| 日韩精品免费一区二区三区| 亚洲专区视频| 国产精品亚洲一区二区三区在线观看| 亚洲精品在线a| 久久国产小视频| 久久99免费视频| 视频一区免费在线观看| 日韩欧美视频专区| 国产精品一线天粉嫩av| 视频一区视频二区在线观看| 视频二区不卡| 美腿丝袜在线亚洲一区| 亚洲开心激情| 欧美日韩精品一本二本三本 |