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

以下代碼摘自yii框架 " /> 国产亚洲福利精品一区,在线视频av大全色久久,91久久精品国产亚洲

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

yii框架源碼分析之創建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;
}
} 

php技術yii框架源碼分析之創建controller代碼,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本成熟bbxxxxxxxx | 国产成人99久久亚洲综合精品 | 久久久96 | 5g在线视讯年龄确认海外禁止进入 | 久草在线福利资站免费视频 | 果冻传媒在线观看高清完整免费 | 99久久国产综合精品网成人影院 | 好看AV中文字幕在线观看 | 野花日本免费完整版高清版动漫 | www.日本 高清.com | 在线观看成人3d动漫入口 | 久久免费看少妇高潮A片2012 | 亚洲 天堂 欧美 日韩 国产 | 99视频精品国产在线视频 | 国产婷婷色一区二区三区在线 | 国产亚洲欧美在线中文BT天堂网 | 亚洲色欲色欲综合网站 | 二级特黄绝大片免费视频大片 | 欧美日韩高清一区二区三区 | 9位美女厕所撒尿11分 | 婷婷综合久久狠狠色 | 久久中文字幕免费高清 | 99视频久久精品久久 | 短篇合集纯肉高H深陷骚 | 色噜噜狠狠一区二区三区 | 嗯 用力啊 嗯 c我 啊哈老师 | 美女视频黄a视频全免费网站色窝 | 回复术士勇者免费观看全集 | 白人大战34厘米黑人BD | 亚洲电影成人 成人影院 | 翁止熄痒禁伦短文合集免费视频 | 亚洲 欧美 清纯 校园 另类 | 青青草A在在观免费线观看 青青草AV国产精品 青青草 久久久 | 国产精品久久自在自2021 | 变态露出野外调教 | 亚洲黄色网页 | 99久久夜色精品国产亚洲AV卜 | 日韩内射美女人妻一区二区三区 | 伊人久久大香线蕉综合亚洲 | 忘忧草研究院一二三 | 国内自拍 在线 亚洲 欧美 |