yii 2.0 代码阅读 小记
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 代码阅读 小记的更多相关文章
- 代码阅读分析工具Understand 2.0试用
Understand 2.0是一款源代码阅读分析软件,功能强大.试用过一段时间后,感觉相当不错,确实可以大大提高代码阅读效率.由于Understand功能十分强大,本文不可能详尽地介绍它的所有功能,所 ...
- [Yii2.0] 以Yii 2.0风格加载自定义类或命名空间 [配置使用Yii2 autoloader]
Yii 2.0最显著的特征之一就是引入了命名空间,因此对于自定义类的引入方式也同之前有所不同.这篇文章讨论一下如何利用Yii 2.0的自动加载机制,向系统中引入自定义类和命名空间.本文旨在抛砖引玉,如 ...
- Android 上的代码阅读器 CoderBrowserHD 修改支持 go 语言代码
我在Android上的代码阅读器用的是 https://github.com/zerob13/CoderBrowserHD 改造的版本,改造后的版本我放在 https://github.com/ghj ...
- Linux协议栈代码阅读笔记(二)网络接口的配置
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...
- [置顶] Linux协议栈代码阅读笔记(一)
Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...
- Yii Framework2.0开发教程(5)数据库mysql性能
继续<Yii Framework2.0开发教程(3)数据库mysql入门> 首先给予一定的尊重yii2数据库支持引进 Yii 基于 PHP's PDO一个成熟的数据库访问层的建立.它提供了 ...
- 图形化代码阅读工具——Scitools Understand
Scitools出品的Understand 2.0.用了很多年了,比Source Insight强大很多.以前的名字叫Understand for C/C++,Understand for Java, ...
- Yii 2.0.3 Advanced版控制器不能包含大写字母的Bug
Yii 2.0.3 Advanced版控制器不能包含大写字母的Bug,我是直接下载Archive文件安装的,非Composer方式安装 Yii 框架之前是支持在Url中包含大写字母的 最新的Yii 2 ...
- MediaInfo代码阅读
MediaInfo是一个用来分析媒体文件的开源工具. 支持的文件非常全面,基本上支持所有的媒体文件. 最近是在做HEVC开发,所以比较关注MediaInfo中关于HEVC的分析与处理. 从Meid ...
随机推荐
- 分享10个Js的小型库,效果真的很棒
1.$fx()简介:$fx()是一个轻量级的动画库,一些复杂的动画,可以由多个简单的动画效果进行组合,但是提供的是混淆压缩过的代码,对于研究动画源码的朋友可能特别不爽API:http://fx.ine ...
- shell 全局和局部变量
/******************************************************************** * shell 全局和局部变量 * 声明: * 到目前为止, ...
- 【 D3.js 选择集与数据详解 — 5 】 处理模板的应用
在[选择集与数据 - 4]一文中,介绍了一个update.enter.exit的处理模板,这个模板很常用,本文将通过一个例子来讲解其使用方法. 1. 模板 复习一下上一章提到的模板. //绑定数据后, ...
- MVC三个IOC注入点之Ninject使用示例
群里一个技术大牛说MVC有三个注入点,但我只会一个DefaultControllerFactory. 在群友的帮助下,我大致了解了下: IControllerFactory=>IDependen ...
- 44、网页启动Activity,网页传值Activity
在assets新建一个demo.html 文件. <html> <head> <meta http-equiv="Content-Type" ...
- linux删除数据文件无备份恢复
参考 : http://www.lunar2013.com/2013/06/linux-%E8%AF%AF%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E6%81%A2%E ...
- Ofbiz 10.04 + eclipse 安装与配置
1.下载 ofbiz 10.04:http://ofbiz.apache.org/download.html: 2.下载 freemarker-2.3.15 eclipse 插件(FreeMarker ...
- Ofbiz初探
转:http://xmmartin.blog.51cto.com/2310947/771236 主导建设一个电子商务系统希望从Ofbiz了解中获得一些借鉴1.下载ofbiz,目前的版本是10.04,下 ...
- 树莓pi快速ssh【校园网】
校园网是NAT后的,没有显示器,我把路由器的DHCP服务关了,这样的情况下怎么ssh到树莓pi? 把树莓pi 连到路由器上(已经关闭DHCP),手机安装FING https://play.google ...
- Ubuntu 14.04 设置静态IP
使用Network Manager UI界面中指定 手动时,无法保存. 通过修改配置文件解决来此问题.记录以下. 如果输入过密码后,就会出现在这个目录下面, 以如下chinaNet为例 gaojing ...