国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - PHP教程 - yii框架源碼分析之創建controller代碼

yii框架源碼分析之創建controller代碼

2019-12-02 13:59PHP教程網 PHP教程

我們可以看到有時會使用protected目錄下的controller,有時會使用module中controller,具體是如何處理的呢,請看如下的分析

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

我們可以看到有時會使用protected目錄下的controller,有時會使用module中controller,具體是如何處理的呢,請看如下的分析: 

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

復制代碼代碼如下:


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

//在這里調用createController先去創建一個controller實例,由此可見createController是選擇controller的關鍵 
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,假設我們訪問的route是site/contact 
public function createController($route,$owner=null) 

//首次進入這個函數,$owner參數為空 
if($owner===null) 
$owner=$this; 
//如果$route參數中不含/,那么使用默認的controller 
if(($route=trim($route,'/'))==='') 
$route=$owner->defaultController; 
$caseSensitive=$this->getUrlManager()->caseSensitive; 
//為了能夠完整運行下面的循環,給$route后面加一個/ 
$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 

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

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

//如果能通過getModule方法獲取到一個獨立模塊,則再次調用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的目錄: 
//對于CWebApplication,對應config['basePath'](參見配置文件)./controller/,例如你的controller在%webroot%/protected/controller/SiteController.php 
//對于CModule的子類,對應改子類所在文件夾./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存在,根據上面所得到的controller類文件路徑,創建類實例 
//如果不存在,則是子目錄下的controller,繼續循環尋找最終的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; 

}  

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 羞羞网站免费 | 涩涩视频在线免费看 | 中文字幕av在线 | 在线观看一区二区三区四区 | 欧美精品91| 亚洲精品乱码久久久久膏 | 可以免费看黄的网站 | 国产成人精品综合 | 欧美日韩国产一区二区在线观看 | 亚洲一区中文字幕在线观看 | 亚洲福利 | 欧美国产日韩精品 | 国内久久精品 | 国产成人av在线 | 国产精品美女久久久久久久久久久 | 国产成人在线视频 | 一级做a爰片久久毛片免费陪 | 人体一区 | 国产伦精品一区二区三区 | 国产精品久久久久久 | 女人夜夜春高潮爽av片 | 亚洲精品成人 | 久久久国产精品免费观看 | 成人免费毛片嘿嘿连载视频 | 99久久精品一区二区成人 | 国产精品久久久久久久久免费桃花 | 中文字幕av第一页 | 久久99精品久久久久 | 91操碰 | av午夜电影 | 成人a视频在线观看 | 久久se精品一区精品二区 | 青青草原亚洲 | 久久久久久久99 | 黄色网址视频大全 | 精品国产青草久久久久福利 | 91麻豆精品国产91久久久资源速度 | 在线观看国产视频 | 午夜影视免费观看 | 国产精品美女久久久久久不卡 | 精品国产91 |