首页 >

yii框架源码分析之创建controller代码【PHP】

后端开发|php教程yii框架源码分析之创建controller代码【PHP】
yii框架,controller
后端开发-php教程
使用yii框架的url路径一般形如hostname/?r=xxxx/xxxx/xxxx&sdfs=dsfdsf
java 源码查看,怎样把vscode改成中文版,ubuntu prime,tomcat证书密码配置获取,sqlite和xml,网页设计尺寸2017,ftp无法连接服务器,dz论坛小说插件,前端框架 轻量级,爬虫英文歌,php多维数组去重,百度seo引流,资讯类网站源码,书法网页模板源码,ecmall运费模板,wordpress 找回密码页面模板,投资管理系统 asp,c语言网页抓取程序源代码lzw
我们可以看到有时会使用protected目录下的controller,有时会使用module中controller,具体是如何处理的呢,请看如下的分析:
易语言qq采集源码,vscode编辑器中文,ubuntu空间大,tomcat启动jar问题,爬虫post作用,php中断执行,益阳seo优化厂家电话,怎么在线下载电影网站源码,精仿2345手机网站模板lzw
以下代码摘自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;
}
} 
可以生成静态网站源码,ubuntu用ssh问题,如何编写爬虫病毒,快捷,缅甸seo招聘lzw

yii框架源码分析之创建controller代码【PHP】
  • php之ZendFramewor篇(5)组件:Zend_Controller基础
  • php之ZendFramewor篇(5)组件:Zend_Controller基础 | php之ZendFramewor篇(5)组件:Zend_Controller基础 ...

    yii框架源码分析之创建controller代码【PHP】
  • php url伪静态弥合析
  • php url伪静态弥合析 | php url伪静态弥合析 ...

    yii框架源码分析之创建controller代码【PHP】
  • 关于zend.framework的一些疑问解决办法
  • 关于zend.framework的一些疑问解决办法 | 关于zend.framework的一些疑问解决办法 ...