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

首頁 > 擴展 > MVC > 正文

Zend的MVC機制使用分析(一)

2024-09-06 20:44:33
字體:
來源:轉載
供稿:網友

代碼

復制代碼 代碼如下:www.CuoXIn.com

$front = Zend_Controller_Front::getInstance();
Zend_Layout::startMvc(array('layoutPath' => USVN_LAYOUTS_DIR));

$front->setRequest(new USVN_Controller_Request_Http());
$front->throwExceptions(true);
$front->setBaseUrl($config->url->base);

$router = new Zend_Controller_Router_Rewrite();
$routes_config = new USVN_Config_Ini(USVN_ROUTES_CONFIG_FILE, USVN_CONFIG_SECTION);
$router->addConfig($routes_config, 'routes');
$front->setRouter($router);
$front->setControllerDirectory(USVN_CONTROLLERS_DIR);

Zend_Controller_Front::getInstance()->dispatch();

分析

首先看下Zend_Controller_Front::getInstance是調用單例模式,實例化了它的內部屬性_plugins,實例化了一個Zend_Controller_Plugin_Broker類。

 

這個類是管理front的插件的類。先看一個Front中的方法public function registerPlugin(Zend_Controller_Plugin_Abstract $plugin, $stackIndex = null)

意思是如果你有一個自己的插件要插入使用的話,調用這個函數能把你自己的插件委托給Zend_Controller_Plugin_Broker使用。

如果你有愿望繼續跟下去你會看到注冊插件做的一件最根本的事情就是把request和response放入到你的插件中去(setRequest和setResponse)。

class Zend_Controller_Plugin_Broker extends Zend_Controller_Plugin_Abstract

這個實現了抽象類Zend_Controller_Plugin_Abstract。
Zend_Controller_Plugin_Abstract是所有插件的抽象類,所有用戶自己定義的插件或者Zend已有的插件都要從這個類繼承。這里就看到了,前端控制器Front就是使用broker作為用戶插件注冊。

這個抽象類可以被實現的函數有:

routeStartup: 在路由發送請求前被調用

routeShutdown:在路由完成請求后被調用

dispatchLoopStartup:在進入分發循環(dispatch loop)前被調用

Predispatch:在動作由分發器分發前被調用

postdispatch:在動作由路由器分發后被調用

dispatchLoopShutdown:在進入分發循環(dispatch loop)后被調用

 

我們還看到了getRequest, getResponse兩個方法,我們可以通過他們分別從控制器中獲取request對象和response對象

 

好了,扯遠了,回到最開始的代碼,Zend_Controller_Front::getInstance實際上來看做的事情就是注冊了一個broker插件放到$front中。

 

下面一行代碼

Zend_Layout::startMvc(array('layoutPath' => USVN_LAYOUTS_DIR));

看到Zend/Layout.php中,startMvc做了兩件事:首先是調用自己的構造函數來實例化自己(切記帶著initMvc參數為true),然后是設置參數。

Zend_Layout的構造函數比較復雜,就跟到里面看看。首先也是設置傳遞進來的參數$options,我們這個例子中是傳遞進來Array ( [layoutPath] => /var/www/html/usvn/app/layouts )這個array作為options,構造函數就是調用$this->setOptions($options);

這個setOptions做的事是根據array的每個key,調用$this->set$key($val);也就是說,以上面的例子來說,setOptions調用了setLayoutPath("/var/www/html/usvn/app/layouts")

順藤摸瓜,setLayoutPath的功能是設置自己類的this->_layout為"/var/www/html/usvn/app/layouts", 然后設置_enable為true;這兩個屬性記住,以后會有使用的。

 

回退到Zend_Layout的構造函數,初始化options之后是調用了_initVarContainer();

這個函數做了這么個事情:

$this->_container = Zend_View_Helper_Placeholder_Registry::getRegistry()->getContainer(__CLASS__);

又出現了Zend_View_Helper_Placeholder_Registry(我翻譯為:Zend視圖助手注冊表)

 

getRegistry() 將Zend_View_Helper_Placeholder_Registry作為key,Zend_View_Helper_Placeholder_Registry類的實例作為value注冊到之前見過的Zend_Registry中。這個類的構造函數就什么事都沒有。

 

getRegistry()返回了Zend_View_Helper_Placeholder_Registry實例,下面調用getContainer(__CLASS__)。 這里的__CLASS__是什么,當前調用的類,自然就是Zend_Layout了。這里是getContainer("Zend_Layout")

 

進入到getContainer里面,它調用了createContainer("Zend_Layout")。createContainer("Zend_Layout")是在Registry中以Zend_Layout為key,Zend_View_Helper_Placeholder_Container類為value的array。

 

Zend_View_Helper_Placeholder_Container實現抽象類Zend_View_Helper_Placeholder_Container_Abstract,這個抽象類實際上也是一個ArrayObject,這個在之前的文章有提到過了,是一個和泛型類一樣的東東。

 

好了,這里不跟下去了,回頭到Zend_Layout的構造函數

_initVarContainer結束了,下面是調用兩個重要的函數:

$this->_setMvcEnabled(true);

$this->_initMvc();

Mvc大家一定很熟悉,我們來看看這里是怎么個MVC的

setMvcEnabled沒什么特別,設置標志位this->_mvcEnabled

_initMvc做了兩件事,_initPlugin和_initHelper。

先看initPlugin:

獲取PluginClass,這里的pluginClass就是Zend_Layout_Controller_Plugin_Layout,可以看到,這里是作為一個插件的形式放進來的。

接著又獲取了Zend_Controller_Front的實例,調用:

$front->registerPlugin(

new $pluginClass($this),

99

);

 

記得前面對Zend_Controller_Front的分析不?里面有registerPlugin的函數,是將插件委托給front的broker來用。有人就會問后面的99是什么意思?是插件的索引順序,越后面的插件越后執行插件的動作。

 

下面再看_initHelper:

獲取helperClass,這里的helperClass就是Zend_Layout_Controller_Action_Helper_Layout

if (!Zend_Controller_Action_HelperBroker::hasHelper('layout')) {

。。。

Zend_Controller_Action_HelperBroker::getStack()->offsetSet(-90, new $helperClass($this));

}

如果Action_HelperBroker沒有layout的helper的話

就執行下面的offsetSet命令。將-90和Zend_Layout_Controller_Action_Helper_Layout實例作為參數傳入。

和plugin同樣的關系,將Zend_Layout_Controller_Action_Helper_Layout實例作為value存入到this->_helpersByPriority和this->_helpersByNameRef去了

前面的-90是權重,也是要保證這個helper是最后調用(看最后一行是krsort排序)

好了,Layout的構造函數就這樣分析結束了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久91超碰青草是什么| 日本欧美国产在线| 亚洲男人的天堂网站| 91在线观看免费| 亚洲国产小视频| 一区二区成人av| 超薄丝袜一区二区| 欧美精品久久久久久久久久| 日本19禁啪啪免费观看www| 国产精品久久一区| 正在播放欧美一区| 国产亚洲精品一区二区| 欧美成年人视频| 456亚洲影院| 欧洲成人免费视频| 成人信息集中地欧美| 国产精品日日摸夜夜添夜夜av| 国产欧美最新羞羞视频在线观看| 92看片淫黄大片看国产片| 永久免费看mv网站入口亚洲| 亚洲欧美999| 国产精品露脸自拍| 日日骚av一区| 操日韩av在线电影| 懂色av中文一区二区三区天美| 亚洲一区二区三区在线免费观看| 97高清免费视频| www.久久久久久.com| 欧美一区二区三区四区在线| 中文字幕日韩欧美精品在线观看| 久久久久久久久国产| 国产精品福利网| 日韩av一区在线观看| www.亚洲男人天堂| 欧美在线精品免播放器视频| 国产一区二区av| 国产成人精品久久久| 九九热精品在线| 久久综合免费视频| 国产精品美女在线| 日本韩国在线不卡| 精品视频在线播放免| 欧美视频一二三| 在线视频欧美日韩| 久久久久国产视频| 亚洲国产精品va在线看黑人动漫| 亚洲精品99久久久久中文字幕| 久久精品国产欧美亚洲人人爽| 亚洲a∨日韩av高清在线观看| 岛国av一区二区| 91po在线观看91精品国产性色| 国产一区二区三区直播精品电影| 亚洲free性xxxx护士白浆| 欧美电影免费在线观看| 尤物九九久久国产精品的分类| 国产精品久久久久aaaa九色| 日韩电影中文字幕在线观看| 动漫精品一区二区| 色综合久久久888| 成人av资源在线播放| 国产精品欧美激情在线播放| 伊人成人开心激情综合网| 亚洲国产精品人人爽夜夜爽| 日韩在线小视频| 在线电影欧美日韩一区二区私密| 亚洲免费视频网站| 色综合久久88色综合天天看泰| 国产69精品久久久| 亚洲综合在线中文字幕| 97在线日本国产| 高跟丝袜一区二区三区| 伊人男人综合视频网| 亚洲精品女av网站| 久久不射电影网| 亚洲国产精品久久久久秋霞不卡| 成人观看高清在线观看免费| 亚洲激情久久久| 国产69精品久久久久9999| 精品在线观看国产| 日韩成人av网| 成人免费在线视频网站| 日韩最新在线视频| 九九视频直播综合网| 疯狂蹂躏欧美一区二区精品| 久久久久久18| 国产亚洲精品久久久久久777| 亚洲女人天堂视频| 国产成人av在线播放| 欧美一级bbbbb性bbbb喷潮片| 国产精品福利久久久| 欧美日韩国产色视频| 亚洲欧洲一区二区三区久久| 欧美一区二区三区艳史| 欧美综合激情网| 欧美老妇交乱视频| 中文字幕久久精品| 国产女精品视频网站免费| 亚洲精品欧美一区二区三区| 久久91精品国产91久久跳| 欧美亚洲成人xxx| 欧美国产第一页| 91亚洲国产成人精品性色| 欧美成年人视频网站欧美| 亚洲美女av网站| 2025国产精品视频| 日韩欧美在线第一页| 成人做爽爽免费视频| 91av视频在线观看| 国产精品草莓在线免费观看| 国产精品视频精品视频| 九九九久久久久久| 亚洲影院色在线观看免费| 成人黄色免费网站在线观看| 精品色蜜蜜精品视频在线观看| 亚洲第一区在线观看| 欧美激情一区二区三区在线视频观看| 欧美极品少妇xxxxⅹ喷水| 国产一区二区精品丝袜| 日韩**中文字幕毛片| 91豆花精品一区| 亚洲欧美精品中文字幕在线| 国产精品久久久久久久一区探花| 超碰精品一区二区三区乱码| 日韩hd视频在线观看| 亚洲精品自在久久| 欧美大码xxxx| 欧美精品中文字幕一区| 91亚洲国产精品| 亚洲一区二区自拍| 欧美日韩美女视频| 欧美精品在线第一页| 精品免费在线视频| 亚洲欧美精品中文字幕在线| 日韩中文字幕视频在线观看| 欧美人与物videos| 亚洲影视九九影院在线观看| 美女视频久久黄| 91精品在线观| 成人日韩在线电影| 国产日韩欧美91| 日本高清不卡在线| 亚洲欧洲在线视频| 成人看片人aa| 97精品久久久| 精品成人乱色一区二区| 久久久久久91香蕉国产| 亚洲欧洲日产国产网站| 亚洲一级片在线看| 国内精品国产三级国产在线专| 欧美富婆性猛交| 国产成人精品免高潮在线观看| 国产日韩在线免费| 亚洲大胆人体av| 亚洲一区中文字幕在线观看| 青青久久av北条麻妃海外网| 欧美一级高清免费播放| 欧美精品国产精品日韩精品| 日韩激情片免费| 久久九九全国免费精品观看| 一本大道香蕉久在线播放29| 欧美放荡办公室videos4k| 少妇高潮 亚洲精品| 97精品国产97久久久久久| 亚洲偷欧美偷国内偷|