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

首頁 > 學院 > 開發設計 > 正文

26.Yii 模塊(2)

2019-11-14 09:11:17
字體:
來源:轉載
供稿:網友

模塊結構

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

這里寫圖片描述

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

這里寫圖片描述

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

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

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

這里寫圖片描述

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

這里寫圖片描述

通過該函數的名稱字面意思為"運行控制器"。因此首先第一步就是要創建一個控制器,即函數createController($route)。我們知道控制器的是包含在模塊中,因此也在該函數中,通過分析$route可以得到相應的模塊,以及模塊中的控制器和相應的動作,即list($controller,$actionID)=$ca;上面的流程圖即為該函數createController($route)的函數流程圖。現在應該清楚了一個模塊是怎么被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中,方便訪問 //下面幾個函數就是模塊的初始化需要做的幾件事情,可以通過重寫preinit()和init()來自定義模塊可以通過自定義相應的函數來定制和初始化模塊的參數 $this->preinit();//預初始化,一般用來設置模塊相關的行為對象$behaviors[],預加載對象$preload[],和其他配置。 $this->configure($config);//加載配置 $this->attachBehaviors($this->behaviors);//掛載行為對象 $this->preloadComponents();//加載CModule::$preload[]中的預加載組件 $this->init();//模塊真正初始化,一般情況下,重寫該函數完整模塊初始化 }

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); } 可以通過此兩個函數對該模塊中的每一個請求進行一些改寫,控制以及收尾的相關工作。在自定義的模塊中,兩個函數的覆蓋的模版如下: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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 日韩欧美激情视频 | 亚洲精品午夜国产va久久成人 | 一级电影在线观看 | 久久亚洲美女视频 | 国产成视频在线观看 | 欧美激情999| 亚洲一区二区中文 | 国产1区2区3区中文字幕 | 中文字幕专区高清在线观看 | chengrenzaixian| 欧洲精品久久 | 成人在线高清视频 | 日韩.www| 国产精品自在线拍 | 欧美一级特级 | av成人在线播放 | 美女污污在线观看 | jizzjizzjizzjizz国产 | 毛片在哪里看 | 最近国产中文字幕 | 男男羞羞视频网站国产 | 成人免费观看49www在线观看 | 日日草夜夜 | 久久毛片免费观看 | 成人在线视频播放 | 国产98色在线 | 97伦理| 亚洲性生活免费视频 | 97视频| 9丨九色丨国产 | 免费在线看a | 国产黄色一级大片 | 毛片视频免费播放 | 日韩做爰视频免费 | 国产午夜免费 | 一级成人欧美一区在线观看 | 国产精品久久久乱弄 | 他也色在线视频 | 亚洲无线看 | 色婷婷tv| 视频一区二区三区在线播放 |