一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - PHP教程 - yii框架源碼分析之創(chuàng)建controller代碼

yii框架源碼分析之創(chuàng)建controller代碼

2019-12-02 13:59PHP教程網(wǎng) PHP教程

我們可以看到有時(shí)會(huì)使用protected目錄下的controller,有時(shí)會(huì)使用module中controller,具體是如何處理的呢,請(qǐng)看如下的分析

使用yii框架的url路徑一般形如hostname/?r=xxxx/xxxx/xxxx&sdfs=dsfdsf 

我們可以看到有時(shí)會(huì)使用protected目錄下的controller,有時(shí)會(huì)使用module中controller,具體是如何處理的呢,請(qǐng)看如下的分析: 

以下代碼摘自yii框架核心代碼%Yiiroot%/framework/web/CWebApplication.php 

復(fù)制代碼代碼如下:


================================================================================================= 
//1.runController是執(zhí)行一個(gè)controller的方法,$route是$_GET['r'] 
public function runController($route) 

//在這里調(diào)用createController先去創(chuàng)建一個(gè)controller實(shí)例,由此可見createController是選擇controller的關(guān)鍵 
if(($ca=$this->createController($route))!==null) 

list($controller,$actionID)=$ca; 
$oldController=$this->_controller; 
$this->_controller=$controller; 
$controller->init(); 
$controller->run($actionID); 
$this->_controller=$oldController; 

else 
throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".', 
array('{route}'=>$route===''?$this->defaultController:$route))); 

================================================================================================== 
//2.接下來我們分析createController,假設(shè)我們?cè)L問的route是site/contact 
public function createController($route,$owner=null) 

//首次進(jìn)入這個(gè)函數(shù),$owner參數(shù)為空 
if($owner===null) 
$owner=$this; 
//如果$route參數(shù)中不含/,那么使用默認(rèn)的controller 
if(($route=trim($route,'/'))==='') 
$route=$owner->defaultController; 
$caseSensitive=$this->getUrlManager()->caseSensitive; 
//為了能夠完整運(yùn)行下面的循環(huán),給$route后面加一個(gè)/ 
$route.='/'; 
//將/的位置保存在$pos中 
while(($pos=strpos($route,'/'))!==false) 

//$id是前半部分,即site 
$id=substr($route,0,$pos); 
if(!preg_match('/^\w+$/',$id)) 
return null; 
if(!$caseSensitive) 
$id=strtolower($id); 
//$route變成后半部分,即contact 
$route=(string)substr($route,$pos+1); 
//controller根目錄或子目錄前綴 
if(!isset($basePath)) // first segment 

//首次進(jìn)入,$owner為空,沒有這個(gè)成員變量 
//非首次進(jìn)入或$owner有值,有可能設(shè)置了這個(gè)成員變量,參見CWebModule類 
if(isset($owner->controllerMap[$id])) 

return array( 
Yii::createComponent($owner->controllerMap[$id],$id,$owner===$this?null:$owner), 
$this->parseActionParams($route), 
); 

//如果能通過getModule方法獲取到一個(gè)獨(dú)立模塊,則再次調(diào)用createController,適用于site是module名的情況,參考protected/config/main.php配置文件,例如你的controller在%webroot%/protected/module/site/controller/ContactController.php 
if(($module=$owner->getModule($id))!==null) 
return $this->createController($route,$module); 
//controller的目錄: 
//對(duì)于CWebApplication,對(duì)應(yīng)config['basePath'](參見配置文件)./controller/,例如你的controller在%webroot%/protected/controller/SiteController.php 
//對(duì)于CModule的子類,對(duì)應(yīng)改子類所在文件夾./contoller/,例如你的controller在%webroot%/protected/module/site/controller/ContactController.php 
$basePath=$owner->getControllerPath(); 
$controllerID=''; 

else 
$controllerID.='/'; 
$className=ucfirst($id).'Controller'; 
$classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php'; 
//如果$classFile存在,根據(jù)上面所得到的controller類文件路徑,創(chuàng)建類實(shí)例 
//如果不存在,則是子目錄下的controller,繼續(xù)循環(huán)尋找最終的controller,例如你的controller在%webroot%/protected/controller/somedir/SiteController 
if(is_file($classFile)) 

if(!class_exists($className,false)) 
require($classFile); 
if(class_exists($className,false) && is_subclass_of($className,'CController')) 

$id[0]=strtolower($id[0]); 
return array( 
new $className($controllerID.$id,$owner===$this?null:$owner), 
$this->parseActionParams($route), 
); 

return null; 

$controllerID.=$id; 
$basePath.=DIRECTORY_SEPARATOR.$id; 

}  

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人影院入口 | 成人伊人亚洲人综合网站222 | 2022日韩理论片在线观看 | 5x视频在线观看 | 欧美日韩国产成人综合在线影院 | 热99re久久精品精品免费 | 亚洲精品在线免费看 | 色啪久久婷婷综合激情 | 亚洲天堂2015 | 亚洲 日本 中文字幕 制服 | 午夜精品久久久久久久99 | 调教开发新婚娇妻放荡 | 日本亚洲欧洲高清有码在线播放 | 亚洲国产日韩欧美mv | 双性总裁(h) | 亚洲精品欧洲久久婷婷99 | 欧美日韩精品在线观看 | 美女张开大腿让男人桶 | 亚洲国产货青视觉盛宴 | 全程粗语对白视频videos | 日韩精选 | 五月天精品视频播放在线观看 | 女烈受刑重口小说 | 亚洲黄色免费在线观看 | 性派对videofreeparty | 免费特黄一区二区三区视频一 | sss在线播放 | 国产成人精品日本亚洲网址 | 免费永久观看美女视频网站网址 | 午夜AV内射一区二区三区红桃视 | 晓雪老师我要进你里面好爽 | 深夜在线看 | 国产区香蕉精品系列在线观看不卡 | 艾秋麻豆果冻传媒老狼仙踪林 | 色婷婷久久综合中文久久一本` | 日日操天天爽 | 天天排行网 | 丫鬟粗大狠狠贯穿h | 闺蜜调教我做她的脚奴 | 99re这里只有精品在线观看 | 精品久久香蕉国产线看观看亚洲 |