在《Yii分析4:run的执行》一文中,介绍了Yii的app在执行run()方法时的主要步骤,在处理请求的方法processRequest()中首先通过路由管理类(参考《Yii分析5:路由管理类》)获取这个请求的route,之后将这个route作为参数传递给方法runController,接下来我们就来看看这个runController是如何执行的。
RunController的代码比较简洁,很好的秉承Yii框架的特色:
public function runController($route)
{
//根据route创建Controller对象数组
if(($ca=$this->createController($route))!==null)
{
//包含controller对象和actionID
list($controller,$actionID)=$ca;
//TODO::这里是干什么用的
$oldController=$this->_controller;
$this->_controller=$controller;
//调用controller对象的初始化方法
$controller->init();
//使用actionID运行这个Controller
$controller->run($actionID);
$this->_controller=$oldController;
}
Else
//如果没有找到对应的Controller,跳转到404页面
throw new CHttpException(404,Yii::t('yii','Unable to resolve the request "{route}".',
array('{route}'=>$route===''?$this->defaultController:$route)));
}
其实真正的核心处理是在createController,对于createController,我们着重需要了解的是下面的这段注释:
/**
* ……
* 这个方法以下面的顺序创建一个控制器
* 1. 如果第一个字段在controllerMap(初始配置)中,则使用对应的控制器配置来创建控制器
* 2.如果第一个字段是一个模块(module)ID,则使用相应的模块来创建控制器
* 3.如果通过上面两项均无法创建控制器,将会搜索controllerPath(根目录对应的controller文件夹)来创建对应的控制器。
* ……
*/
public function createController($route,$owner=null)
{
……
}
也就是说,对于一个aaaa/bbbb/cccc的路由,yii首先从config/main.php中定义的controllerMap去寻找是否有名为aaaa的controller,如果有,那么就已aaaa为controller进行创建,否则再去寻找是否有名为aaaa的模块,如果有,那么就使用aaaa模块的名为bbbb的controller进行创建,否则在protected/controllers下寻找是否有名为aaaa的controller。
创建完Controller之后,就进入具体Controller类的run方法了,即实际的运行函数。
分享到:
相关推荐
Yii护照 安装 :light_bulb: 这是展示如何安装软件包的好地方,请参见下文: 跑步 $ composer require inquid/yii-passport 用法 :light_bulb: 这是显示一些用法示例的好地方! 变更日志 请看看 。 贡献 请看看 。...
yii-进程锁 防止脚本的多个副本同时运行。 使用 composer.json依赖项: " happyproff/yii-processlock " : " * " 注册应用程序组件: 'components' => [ . . . , 'processLock' => [ 'class' => '...
yii2elfinder 感谢: : 感谢:zybodya 提供当前 yii 版本 yii2elfinder 介绍:旧版本无法使用,因为它完全不适用于最新的jquery版本! 所以除了行动,我不得不改变一切;) 这个扩展允许你将 ElFinder 文件管理...
yii-simplepie yii-simplepie 是用于解析 rss 提要的 yii 扩展: 简单派: simplepie 文档: 用法 在 yii 中安装扩展 下载所有文件并放入 yii 扩展文件夹,然后在 config/main.php 中添加以下代码 'simplepie' ...
yii2sly 这个扩展是惊人的 jquery 滑块“sly”的包装器,可以在这里找到: 请。 仔细查看所有插件选项,可以通过将它们添加到“clientOptions”参数来传递这些选项,如下所示。 可以在此处找到扩展的演示: 安装 ...
用于与支付的 api 配合使用的 Yii 组件 安装 从这个 github 存储库下载 yii-robokassa: cd protected/components git clone https://github.com/ladamalina/yii-robokassa.git 在 protected/config/main.php 中...
Yii-QA简介(此项目目前已不再维护)感谢选择Yii-QA,基于框架基础实现的问答程序。 #意识到目前的急性时间有限,无法管理太多的额外项目,我准备合并现有手上的项目,集成在一个项目中,感谢支持!!!!!!!请关注:...
yii2-swoole 为赋予 Yii2 框架协程异步能力而生。 后期开发会依赖 去实现功能,相信 Swoft 会是下一代优秀的框架。 此插件基于 swoole (v2.0) 底层实现的协程,改造 Yii2 的核心代码,使开发者无感知,以及在不改动...
Arshaw 的 FullCalendar jQuery 插件的 Yii 扩展 作者:Alexey Samoylov ( )。 要求 PHP 5.4 Yii 1.x 例子 全局组件配置示例: 'components' => [ 'fullcalendar' => [ 'class' => 'ext.yii-fullcalendar....
Yii 1 流日志 将 Yii 1 日志发送到 stdout/stderr - 创建用于与提供的 php-fpm/nginx Docker 堆栈一起使用 感谢 Haensel 为! 安装 通过作曲家安装: composer require neam/yii-streamlog:* 或者下载扩展,将src...
Yii 框架的 CKEditor 小部件 简单的 Yii CKEditor 小部件。 CKEditor - 每个人的 WYSIWYG 编辑器。 小部件生成具有相同属性的 CHtml::activeTextArea。 使用 CKEditor 4+ 版本测试。 安装 将此小部件复制到扩展...
yii-seo Yii PHP 框架的搜索引擎优化。 用法 布局中 <?php Yii::app()->controller->widget( 'vendor.crisu83.yii-seo.widgets.SeoHead', array( 'httpEquivs' => array( 'Content-Type' => 'text/html; ...
yii2 console 集成swoole 执行异步任务,例如注册邮件,发送短信 使用方法:http://blog.csdn.net/nextvary/article/details/79136058
yii2fullcalendar JQuery Fullcalendar Yii2扩展JQuery来自: ://arshaw.com/fullcalendar/版本4.0.2许可证MIT jQuery文档: //arshaw.com/fullcalendar/docs/ Yii2扩展,通过 可以在这里找到一个小样本:http: ...
Yii框架演示项目 [Yii Framework]是一个现代框架,旨在为您PHP应用程序奠定坚实的基础。 它旨在显示和测试所有Yii功能。 安装 您至少需要PHP 7.4。 克隆此存储库。 在项目根目录中运行composer update 。 运行./...
Yii 2 高级应用模板 Yii 2 Advanced Application Template 是一个骨架 Yii 2 应用程序,最适合开发具有多层的复杂 Web 应用程序。 模板包括三层:前端、后端和控制台,每一层都是一个独立的 Yii 应用程序。 该模板...
yii-demo 我对 Yii 框架的扩展的演示。
Yii 二维码原始 PHP QRCode 来自由我将其转换为更易于在 Yii 框架中使用。 希望对你有用。要求Yii 1.x PHP 5.x安装将此扩展放在 /protected/extensions/qrcode 在 main.php 中,将以下内容添加到“组件”: 'qrcode'...
yii-搜索 用于Yii2的elasticsearch
yii-basic 《 yii框架实战》教程源码 《 yii框架实战》教程地址: ://www.voidking.com/2017/05/18/deve-yii-in-action/ 安装 原始码 git clone https://github.com/voidking/yii-basic.git basic 数据库 利用...