1.\yii\base\object

设置了get/set属性...使用getName()获取属性名..构造函数中使用config初始化属性

2.\yii\base\Component 继承自Object
额外拥有behaviors和events属性

get,会比object多查找自己的behaviors中的属性

set,on开通的会绑定事件,as开头的会添加行为,最后会查找所有的behaviors,并设置属性

__call 会调用所有behaviors中是否有该方法

event on 添加事件,off移除事件,trigger触发事件

Yii中这个Behaviour是Event Handler的另一种表现形式而已,对事件的处理函数进行了封装
attachBehavior detachBehavior

Component::__construct 或者Object::__construct 的时候.就是绑定了属性
------------------------------------------

3.\yii\base\Event中提供了很多静态方法供外部使用.如on off trigger
同时.拥有 name,sender触发者,handled触发结果是个boolean值,用于停止触发.data,触发数据

trigger 可以触发父级的事件..具体看代码

<pre>
if (is_object($class)) {
$class = get_class($class);
} else {
$class = ltrim($class, '\\');
}
do {
if (!empty(self::$_events[$name][$class])) {
foreach (self::$_events[$name][$class] as $handler) {
$event->data = $handler[1];
call_user_func($handler[0], $event);
if ($event instanceof Event && $event->handled) {
return;
}
}
}
} while (($class = get_parent_class($class)) !== false);
</pre>

4.\yii\base\Behavior

封装了事件处理方法,当添加一个行为的时候,就是绑定了该behavior中的多个事件

5.yii\base\Module

从模块中使用__get..可以直接获取模块中的组件

getComponent...会在第一次的时候实例化组件

setComponent 只是将组件的类名保存起来

preloadComponents 会通过配置中的preload属性的id使用getComponent实例化..同时使用getModule进行模块实例化并保存

getModule 如果是加载子模块,会先加载父模块..再加载子模块.

setModule 将模块名字保存到_modules中

_basePath 模块路径,没有在配置中设置的话,就会反射类名使用dirname取得目录名

_controllerPath 没有设置的话会_basePath/controllers

_viewPath 没有设置的话会是_basePath/views

_layoutPath 没有设置的话会是 _viewPath/layouts

defaultRoute="default" 默认路由

runAction($route,$params)--------------- Yii::$app->controller

1.createController(route) 返回控制器和action
2.$controller->runAction($actionID, $params);返回结果
3.在动作执行完后,会重设Yii::$app->controller为原来的控制器

createController($route)

1.route为空的话.使用defaultRoute 即是default
2.对route进行分割..获取id(模块id||控制器id)和action
3.如果确实有getModule(id).则使用module创建控制器
4.controllerMap有该id则创建控制器
5.根据controllerPath,查找是否有该控制器.有的话则实例化.并将id和模块传入构造函数.
6.返回控制器和action.

6.yii\base\Controller

runAction ---- Yii::$app->requestedAction---- $this->action
1.使用createAction创建动作.
2.会触发actionEvent中的Application::EVENT_BEFORE_ACTION事件,这里可操作事件的isValid属性.
3.会执行该控制器所属模块的beforeAction方法$this->module->beforeAction..触发自身的self::EVENT_BEFORE_ACTION事件
4.会执行该控制器的$this->beforeAction方法..
5.如果上面三个都是返回true的话,则 $action->runWithParams($params);
6.执行控制器的afterAction函数,触发自身的self::EVENT_AFTER_ACTION事件
7.执行模块的afterAction函数
8.触发Application::EVENT_AFTER_ACTION事件

9.在动作执行完后,会重设$controller->action为原来的动作

createAction

1.action为空的话.为defaultAction为 index

2.如果$actionMap中含有的话则..实例化动作

3.action+动作id..如果控制器中有该方法,则创建InlineAction($id,$this,$methodName)

7.yii\base\Application

比模块多了错误处理.和注册了CoreComponents

log errorHandler formatter i18n urlManager view

initExtensions

会将扩展文件中的别名设置

run();

触发 EVENT_BEFORE_REQUEST

执行handleRequest(请求组件)获取响应..

触发 EVENT_AFTER_REQUEST

$response->send();

8. yii\web\Application

注册了核心组件 request response session user assetManager

defaultRoute 为site

$_homeUrl 主页地址.可设置.不设置为scripturl

handleRequest

1.设置@webroot和@web为scriptfile和baseurl
2.使用请求组件解析url返回路由..或者使用catchAll返回路由..catchAll可以作为一个动作进行特殊处理例如,网站关闭则xxx.不关闭则使用$request->resolve()

3.执行 runAction.如果返回的数据继承与Response.则直接返回.

4.如果返回的数据不是response则把数据设置为response的data.再返回

yii 2.0 代码阅读 小记相关推荐

  1. VTM1.0代码阅读:CodingStructure类主要函数

    CodingStructure类中的各个函数对于cu.pu和tu的函数处理,其实大致流程都是差不多一样的,所以这里只对cu的相应函数进行分析. 对于下面CodingStructure类中的各个函数的阅 ...

  2. VTM3.0代码阅读:xEstimateMvPredAMVP函数

    AMVP运用于inter_ME模式的时候. xEstimateMvPredAMVP进行AMVP,获得当前pu的相邻运动信息,构建AMVP列表,最终选择出最优的MVP.AMVP最终获得的MVP作为ME的 ...

  3. VTM3.0代码阅读:xDeriveCUMV函数

    xDeriveCUMV函数根据解码得到的预测参数数据,计算得到mv. 函数内根据解码得到的各个模式的数据,获取到MMVD.三角预测.AffineMerge.普通merge.AffineME.普通int ...

  4. VTM1.0代码阅读:CU、PU、TU

    VTM中的cu.pu和tu在使用时都是作为CodingStructure类的成员变量来使用的,即作为CS中cus.pus和tus数组中的一个变量来使用的,毕竟VTM中的操作都是以CS作为最基本的类来执 ...

  5. Apollo 3.0代码浅析(一)

    0.写在前面 因为工作中的项目使用到ros,因此本次对于apollo的分析是基于apollo 3.0 代码阅读工具为understand 1.目录结构 1.1 根目录 docker:容器相关 docs ...

  6. VVC 代码阅读 compressCtu()函数

    void EncCu::compressCtu( CodingStructure& cs, const UnitArea& area, const unsigned ctuRsAddr ...

  7. 代码阅读总结之Fitch and Mather 7.0(资源文件Resource随笔)

    相关文章导航 Sql Server2005 Transact-SQL 新兵器学习总结之-总结 Flex,Fms3相关文章索引 FlexAir开源版-全球免费多人视频聊天室,免费网络远程多人视频会议系统 ...

  8. VVC/H.266代码阅读(VTM8.0)(三. Slice到CTU的处理 )

    本文是本系列的第三篇博客,内容是分析从Slice到CTU的处理代码. 该系列相关博客为: VVC/H.266代码阅读(VTM8.0)(一. NALU提取) VVC/H.266代码阅读(VTM8.0)( ...

  9. HM代码阅读0:Win10下安装HM16.23,编码一个视频,main函数阅读

    HEVC理论知识的学习告了一段落了,说实话脑子里还是嗡嗡的,剩下的部分就一边阅读代码一边掌握吧. 1. HM16.23安装 首先需要安装Cmake,参考以下博客,照步骤安装即可 https://blo ...

最新文章

  1. 确认!语音识别大牛Daniel Povey将入职小米,曾遭霍普金斯大学解雇,怒拒Facebook
  2. mixin network_基于Mixin Network的Ruby比特币开发教程
  3. python语言有几种编程方式_零基础自学python语言,有哪几种方法?龟叔说:这套教程带你入门...
  4. TK:vtkCameraActor用法实战
  5. python 【第一篇】基础数据类型
  6. 模拟耗时操作_在集成测试中模拟耗时的动作
  7. String特殊值的判断方式
  8. OpenOCD 依赖的deb包
  9. 公钥与私钥 数字签名是什么?
  10. python计算器算法_Python数学运算入门把Python当作计算器
  11. 音视频开发(四十四):M3U8边缓存边播放
  12. [JS]Tue Feb 01 2022 00:00:00 GMT+0800 (中国标准时间) 日期格式化
  13. android 那个桌面好,Hola桌面 可能是最好用的安卓手机桌面
  14. 华人女性社交社区的存在可能
  15. 适合程序员编程的笔记本电脑如何选择?
  16. 线性空间2--子空间
  17. Object Detection with Discriminatively Trained Part Based Models(使用判别训练的部件模型进行目标检测 )
  18. QQ2011去广告显IP正式版(去掉插件及捆绑软件)(3019) 化安装版
  19. God of War:Chains of Olympus download! 下载战神奥林匹斯之链!(ISO torrent)
  20. ext-3 怎么将PDK的库包添加到CCS工程中

热门文章

  1. 5/5 MySQL入门总结:其它操作
  2. ECharts - 极坐标系下的堆叠柱状图
  3. Skipping failed optional dependency /chokidar/fsevents
  4. pytorch0.4版的CNN对minist分类
  5. Python 深拷贝和浅拷贝
  6. Spring—Quartz定时调度CronTrigger时间配置格式说明与实例
  7. JavaScript String支持的辅助format函数+【分页1】
  8. 使用ASP.NET上传图片汇总
  9. 一个简单的C#在线IDE示例
  10. Stegsolve(Data Extract):lsb隐写