麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

26.Yii 模塊(2)

2019-11-14 09:15:47
字體:
來源:轉載
供稿:網(wǎng)友

模塊結構

在YII中,程序入口是一個繼承Capplication的CWebApplication的應用程序,在一個web請求的整個過程中,控制器,模型和視圖都是由Application進行創(chuàng)建和控制。首先我們來看一下CWebApplication的類的繼承結構:

這里寫圖片描述

從上面我們可以看到CWebApplication本身也是一個CModue。在YII中,模塊之間是一個樹形結構。即每一個模塊都可以包含多個子模塊,每一個子模塊可以繼續(xù)包含子模塊.其中APP為樹的頭節(jié)點,如圖:

這里寫圖片描述

對于一個具體請求,假設route=A/B/C/D,下面我們講述一下,APP怎么選擇相應的模塊和模塊中的控制器Controller和動作Action。具體的流程圖如下:

這里寫圖片描述 這里寫圖片描述

對于讀過YII源碼都直到,任何一個web請求都是通過CApplication::Run()函數(shù)開始,進入到CWebApplication::PRocessRequest()。源碼分別如下:

這里寫圖片描述

程序真正的進行到相應模塊,控制器,動作是在函數(shù)processRequest的$this->runController($route);中,該函數(shù)傳入的參數(shù)為$route。何為 $route。其實$route是一個類似A/B/C/D格式的字符串,該字符串中可能包含了模塊,控制器,動作和$_GET相關參數(shù)。該函數(shù)是也是定義在CWebApplication中。代碼如下:

這里寫圖片描述

通過該函數(shù)的名稱字面意思為"運行控制器"。因此首先第一步就是要創(chuàng)建一個控制器,即函數(shù)createController($route)。我們知道控制器的是包含在模塊中,因此也在該函數(shù)中,通過分析$route可以得到相應的模塊,以及模塊中的控制器和相應的動作,即list($controller,$actionID)=$ca;上面的流程圖即為該函數(shù)createController($route)的函數(shù)流程圖。現(xiàn)在應該清楚了一個模塊是怎么被web用戶所調用了吧。下面我們說一下程序怎么在應用程序中添加模塊,當然可能是通過配置文件。

添加模塊 這里寫圖片描述 這里寫圖片描述 這里寫圖片描述


模塊源碼分析 這里寫圖片描述 這里寫圖片描述 這里寫圖片描述

public function __construct($id,$parent,$config=null)//$id為模塊ID,$parent為父模塊ID { $this->_id=$id; $this->_parentModule=$parent; // set basePath at early as possible to avoid trouble if(is_string($config)) $config=require($config); if(isset($config['basePath'])) { $this->setBasePath($config['basePath']);//設置模塊路徑 unset($config['basePath']); } Yii::setPathOfAlias($id,$this->getBasePath());//把該模塊的路徑添加到Alias中,方便訪問 //下面幾個函數(shù)就是模塊的初始化需要做的幾件事情,可以通過重寫preinit()和init()來自定義模塊可以通過自定義相應的函數(shù)來定制和初始化模塊的參數(shù) $this->preinit();//預初始化,一般用來設置模塊相關的行為對象$behaviors[],預加載對象$preload[],和其他配置。 $this->configure($config);//加載配置 $this->attachBehaviors($this->behaviors);//掛載行為對象 $this->preloadComponents();//加載CModule::$preload[]中的預加載組件 $this->init();//模塊真正初始化,一般情況下,重寫該函數(shù)完整模塊初始化 }

CWebModule分析 這里寫圖片描述

public function beforeControllerAction($controller,$action) { if(($parent=$this->getParentModule())===null) $parent=Yii::app(); return $parent->beforeControllerAction($controller,$action); } public function afterControllerAction($controller,$action) { if(($parent=$this->getParentModule())===null) $parent=Yii::app(); $parent->afterControllerAction($controller,$action); } 可以通過此兩個函數(shù)對該模塊中的每一個請求進行一些改寫,控制以及收尾的相關工作。在自定義的模塊中,兩個函數(shù)的覆蓋的模版如下:public function beforeControllerAction($controller, $action) { if(parent::beforeControllerAction($controller, $action)) { // this method is called before any module controller action is performed // you may place customized code here return true; } else return false; }

這里寫圖片描述 這里寫圖片描述 這里寫圖片描述 這里寫圖片描述 這里寫圖片描述 這里寫圖片描述

array( 'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',//模塊的路徑 'preload'=>array('log'),//需要預先加載日志組件 'import'=>array('application.models.*', 'application.components.*',),//需要include的路徑 //組件的配置 'components'=>array( 'user'=>array(//用戶組件的配置 'allowAutoLogin'=>true ), 'log'=>array(//日志組件的配置 'class'=>'CLogRouter', 'routes'=>array(array('class'=>'CWebLogRoute','levels'=>'trace, profile')) ) ), //模塊的配置 'modules'=>array( 'gii'=>array(//自動生成代碼模塊的配置 'class'=>'system.gii.GiiModule', 'passWord'=>'123456' ), ),);

http://blog.csdn.net/colzer/article/details/8443042


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品国产一区二区三区四区阿崩 | 深夜激情视频 | 久久精品日韩一区 | 免费在线观看毛片视频 | 欧美日韩视频网站 | 日本a在线观看 | 精品成人国产在线观看男人呻吟 | 国产精品欧美久久久久一区二区 | 精品久久久久久久久久久下田 | 国产午夜精品久久久久久久蜜臀 | 欧美日日操 | 亚洲四播房| 欧美国产精品久久 | 精品成人在线观看 | 亚洲综合视频在线播放 | 久久草草影视免费网 | 操碰97| 欧美亚洲国产一区 | 成人免费自拍视频 | 久草手机在线视频 | 亚洲视频综合 | 美国黄色毛片女人性生活片 | 18欧美性xxxx极品hd | 国产精品欧美久久久久一区二区 | 特级a欧美做爰片毛片 | 国产影院一区 | 成年免费大片黄在线观看岛国 | 视频一区二区三区在线 | 9999视频| 99热久草| 免费看成年人视频在线 | 成人综合一区二区 | 亚洲精品成人18久久久久 | 吾色视频 | av中文在线观看 | 污视频在线免费播放 | 九九视频精品在线观看 | 日本xxxx色视频在线观看免费, | 日韩一级免费毛片 | 亚洲看片网 | 精品亚洲一 |