亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

MVC with PHP(二)

2024-05-04 22:53:41
字體:
來源:轉載
供稿:網友
mvc with php(一)中的bug的問題是存在,最大的問題是日志系統的問題,等完成這這個介紹后我后把全部更正的程序源碼打包
出來,這里就暫時不做更改了.
先來看看在application.class.php中是如何建立controller實例的:

php代碼:--------------------------------------------------------------------------------
/**
* 執行函數
*
* 此類唯一對外的一個接口
**/
public function run()
{
$this->parsepath();
$this->checksecurity($this->module, $this->action);
1. $controller = new $this->controllerclassname();
2. $controller->{$this->action}();
$this->writelog($this->module, $this->action);
}

--------------------------------------------------------------------------------

application這個類在實例后唯一可進行調用的一個函數,它根據用戶的url請求來分析得出所需要的controller類名,然后實例化這個類(上面標1的地方),再調用從url中獲取的動作名稱(上面標2的地方),

這個舉一個簡單的例子:
url: http://localhost/?module=news&action=showlist
application通過分析這個url重到controllerclassname=news, action=showlist,然后它將在包含處理這個controller類的文件名(在application->getcontrollerfile()中進行),然后實例化news這個
controller類(標1的地方), 隨后調用它的動作showlist(標2的地方).
來看看newscontroller.php中的內容:
=============================================================

php代碼:--------------------------------------------------------------------------------

<?php
/**
* filename: newscontroller.php
* introduce: 新聞控制類
*
* @author: 大師兄
* @email: [email protected]
* @version $id$
* @copyright 2004-10-26
**/
include_once ("./controller/comm/controller.class.php");
include_once ("./model/news/newsmodel.php");

class newscontroller extends controller
{
private $model;

/**
* 構造函數
*
**/
public function __construct()
{
parent::__construct();
$this->model = new newsmodel();
$this->setsmartytemplate_dir("./view/news");
}

/**
* 顯示新聞列表
*
**/
public function showlist()
{
1. $newslist = & $this->model->getlist();

2. $this->smarty->assign("newslist", $newslist);
3. unset($newslist);

4. $this->smarty->display("newslist.html");
}
}
?>

--------------------------------------------------------------------------------

==============================================================
首先,newscontroller類繼承自公共類controller,在類進行初始化時產生一個newsmodel類,這個類是一個model類,由這個類負責新聞模塊所有的對數據庫的交互. parent::__construct()調用父類的構造函數,完成對view的控制類smarty的初始化.$this->setsmartytemplate_dir("./view/news")將模板目錄定位在./view/news目錄.

然后看我們上面的例子,請求url為http://localhost/?module=news&actio...list,表示要調用
showlist這個動作,看newscontroller類的showlist()成員函數:
1. $newslist = & $this->model->getlist(): $this->model在newscontroller初始化時建立,這一句要使用$this->model從數據庫里提取出一個新聞列表,這個列表當然就是smarty在操作循環塊時需要的二維數組了,在newsmodel類中,它是采用adodb回傳的一個二維數組.
2. $this->smarty->assign("newslist", $newslist): 熟悉吧,smarty中循環塊的程序控制
3. unset($newslist):考慮到效率問題,對于這些臨時變量在使用完成后即時將它unset。
4. $this->smarty->display("newslist.html"):使用smarty來顯示view.

大家看明白了嗎?實際上controller類要做的事情就是這樣:1.調用model從數據庫取出記錄 2.操

作smarty顯示view。
再來看看newscontroller的父類controller類的源碼:
===========================================================

php代碼:--------------------------------------------------------------------------------

<?php
/**
* filename: controller.class.php
* introduce: base class of controller
*
* @author: 李曉軍
* @email: [email protected]
* @version $id$
* @copyright 2004-10-26
**/

include_once ("./comm/smarty/smarty.class.php");
include_once ("./comm/config.inc.php");

abstract class controller
{
private $smarty;

/**
* 系統構建函數
* 初始化smarty
**/
function __construct()
{
$this ->smarty = new smarty();

$this->smarty->template_dir = "./view/templates";
$this->smarty->compile_dir = "./view/templates_c";
$this->smarty->cache_dir = "./view/cache";
$this->smarty->cache_lifetime = 60 * 60 * 24;
$this->smarty->caching = false;
$this->smarty->left_delimiter = "<{";
$this->smarty->right_delimiter = "}>";
}

/**
* 設置smarty模板路徑
*
* @param string $template
**/
public function setsmartytemplate_dir($template)
{
$this->smarty->template_dir = $template;
}

/**
* 設置smarty是否進行緩存
*
* @param boolean $cache
**/
public function setsmartycache($cache = false)
{
$this->smarty->cache = $cache;
}

/**
* 設置smarty緩存時間
*
* @param string $cachelifetime
**/
public function setsmartycachetime($cachelifetime)
{
$this->smarty->cache_lifetime = $cachelifetime;
}

/**
* 動作被執行后一個短暫的提示
*
* @param string $module 重新定向到的模塊名稱
* @param string $action 重新定向的動作名稱
* @param string $params 參數名稱
* @param string $message 提示信息
**/
public function redirect($module, $action, $params="", $message="動作已經被成功執

行")
{
$time = wait_for_time;
$params = ("" == $params) ? "" : "&$params";
$url = "?module=" . $module . "&action=" . $action . $params;

//重新定smarty模板目錄至公用目錄
$this->setsmartytemplate_dir("./view/templates");
$this->smarty->assign("url", $url); //重定向的目錄
$this->smarty->assign("message", $message); //提示信息
$this->smarty->assign("time", $time);
$this->smarty->display("wait.html");
}

/**
* 調用本類不存在的方法時進行的處理
*
* @param string $name
* @param string $parameter
**/
public function __call($name, $parameter)
{
throw new actionnotallowexception("對不起,你所請求的動作 <b>$name</b> 沒有定義

...<br>");
}

/**
* 析構函數
*
**/
public function __destruct()
{
unset($this->smarty);
}
}
?>

--------------------------------------------------------------------------------

==============================================
controller是一個抽象類,也就是說它不可以直接使用new 來產生一個實例對象,在類的構造函數里產生一個smarty類,并對其進行基本的設置。其它的幾個函數是對smarty對象進行設置的成員函數, 這里來看看這兩個函數:

public function redirect($module, $action, $params="", $message="動作已經被成功執行"):
這是一個重新定向成員函數,它的作用是當我們對模塊進行一些操作后給出的提示頁面,然后經過設置好的時間自動重新定向到另一個位置,例如我們要對新聞進行一些刪除,刪除成功后我們要給用戶返回這樣一個頁面,告訴用戶操作已經成功,請待n秒后自動返回....這在論壇中是很常見的,這里我也引用了這樣的策略。

public function __call($name, $parameter):
當類調用類沒有聲明的函數時使用這個函數進行處理,這可是個好東東,有了它,可以使用對程序

的控制更加簡單了,大家可以試試這個方法....

好了,controller 部分就談到這里了。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品免费在线视频| 国产精品444| 日韩免费在线播放| 欧美华人在线视频| 中日韩午夜理伦电影免费| 亚洲美女福利视频网站| 成人性生交大片免费观看嘿嘿视频| 精品欧美激情精品一区| 国产精品国产三级国产专播精品人| 亚洲欧洲国产伦综合| 中文字幕一区日韩电影| 国产+成+人+亚洲欧洲| 97久久伊人激情网| 亚洲一区久久久| 国产精品男女猛烈高潮激情| 亚洲区免费影片| 亚洲精品网站在线播放gif| 国产精品日韩电影| 国产免费一区二区三区在线能观看| 亚洲黄页网在线观看| 亚洲成人久久电影| 亚洲成人a级网| 国产精品日韩久久久久| 国产精品亚洲欧美导航| 日本亚洲精品在线观看| 日韩欧亚中文在线| 欧美激情亚洲精品| 欧美亚洲国产另类| 在线视频亚洲欧美| 亚洲成年网站在线观看| 亚洲女人天堂成人av在线| 中文字幕亚洲第一| 色偷偷av一区二区三区| 亚洲大胆人体在线| 成人亚洲欧美一区二区三区| 日本精品va在线观看| 国产精品美女www| 国产最新精品视频| 最近2019中文字幕mv免费看| 成人a级免费视频| 欧美成年人视频| 57pao国产精品一区| 亚洲欧美日韩一区在线| 亚洲xxxx在线| 国产精品爱久久久久久久| 色妞在线综合亚洲欧美| 精品国产1区2区| 另类专区欧美制服同性| 国产午夜精品全部视频播放| 欧美亚洲日本黄色| 亚洲第一网中文字幕| 午夜精品视频在线| 国产区精品视频| 成人免费xxxxx在线观看| 亚洲高清一区二| 国产精品2018| 国产日韩在线亚洲字幕中文| 色无极亚洲影院| 欧美最猛性xxxxx免费| 日韩美女毛茸茸| 国产成人一区二区在线| 91精品久久久久久久久久入口| 一本色道久久综合狠狠躁篇的优点| 国产精品日韩在线观看| 国产精品一久久香蕉国产线看观看| 国产精品吴梦梦| 最近2019中文字幕大全第二页| 中文字幕综合一区| 国产欧美日韩综合精品| 欧美午夜精品久久久久久浪潮| 亚洲福利视频久久| 97国产精品久久| 69国产精品成人在线播放| 97视频在线观看网址| 日韩中文字幕视频在线观看| 精品调教chinesegay| 91国偷自产一区二区三区的观看方式| 亚洲午夜未删减在线观看| 欧美做爰性生交视频| 色系列之999| 亚洲精品www久久久久久广东| 成人免费视频xnxx.com| 亚洲精品国产综合久久| 97在线视频免费看| 中日韩美女免费视频网址在线观看| 国产免费一区二区三区在线观看| 91亚洲精品在线观看| 国产精品高潮呻吟久久av无限| 欧美一乱一性一交一视频| 国产精品久久久久99| www.久久色.com| 久久久久久91香蕉国产| 在线亚洲国产精品网| 国产综合久久久久久| 国产日产欧美精品| 国产精品久久久久久av福利| 国产香蕉一区二区三区在线视频| 欧美肥老太性生活视频| 一区二区福利视频| 国产精品久久久久久久久久免费| 在线视频精品一| 亚洲第一视频在线观看| 91免费看片在线| 亚洲网址你懂得| 91视频国产高清| 欧美中文字幕在线观看| 国产中文日韩欧美| 中文字幕一区二区三区电影| 91精品国产乱码久久久久久久久| 国产精品日韩电影| 欧美激情在线一区| 亚洲欧美国产日韩中文字幕| 在线观看精品自拍私拍| 日韩一级裸体免费视频| 欧美日韩中文字幕在线| 57pao成人国产永久免费| 91视频免费网站| 欧美激情视频给我| 97视频在线观看网址| 欧美另类暴力丝袜| 伊人久久免费视频| www.xxxx欧美| 久久精品国产亚洲| 韩国19禁主播vip福利视频| 国产精品日日摸夜夜添夜夜av| 日韩在线观看免费高清| 国产成人高清激情视频在线观看| 国外成人在线播放| 成人精品在线视频| 亚洲福利在线播放| 精品久久久久人成| 欧美国产日本在线| 亚洲欧美一区二区三区在线| 欧美日韩国产二区| 亚洲精品白浆高清久久久久久| 欧美日韩一区二区在线| 国产不卡精品视男人的天堂| 成人h视频在线观看播放| 欧美午夜宅男影院在线观看| 日av在线播放中文不卡| 高清欧美性猛交xxxx黑人猛交| 欧美黑人国产人伦爽爽爽| 伊人成人开心激情综合网| 亚洲精品电影在线观看| 最近日韩中文字幕中文| 成人黄色网免费| 欧美日韩亚洲一区二区| 色av吧综合网| 国产精品网红直播| 亚洲国产精品成人精品| 91高清视频在线免费观看| 91av在线看| 国产一区二区久久精品| 青草热久免费精品视频| 国产精品吹潮在线观看| 三级精品视频久久久久| 亚洲在线免费观看| 日韩久久精品成人| 亚洲成人黄色在线观看| 国产精品9999| 亚洲综合中文字幕在线观看| 精品久久久久久亚洲精品| 国产成人精品国内自产拍免费看| 精品一区二区三区电影|