- 浏览: 331835 次
- 性别:
- 来自: 北京
博客专栏
-
高性能PHP框架Yii分析...
浏览量:84007
文章分类
最新评论
-
huxiaoyunhust:
价值观这种东西,说不好听是口号,其实是公司每天潜移默化的感染, ...
关于企业价值观的一点点感悟 -
silentime:
stef831018 写道你想多了,企业价值观就两个字:利益怎 ...
关于企业价值观的一点点感悟 -
stef831018:
你想多了,企业价值观就两个字:利益
关于企业价值观的一点点感悟 -
guoyuqiangf8:
关于企业价值观的一点点感悟 -
silentime:
mangguo 写道推荐大家去看看我写的python入门,可以 ...
python如何打印变量的类型
在创建完了一个Application之后,就是通过run方法来“运行”这个应用程序了:
$app = Yii::CreateWebApplication($config);
$app->run();
下面,我们就来看看,run这个方法是怎么执行的,首先run方法并不是在一个具体的application(比如CWebApplication)中定义的,而是在他们的父类CApplication中定义的,代码如下:
public function run() { //触发一个请求开始前的事件 $this->onBeginRequest(new CEvent($this)); //处理具体的请求 $this->processRequest(); //触发请求完成之后的事件 $this->onEndRequest(new CEvent($this)); } public function onBeginRequest($event) { $this->raiseEvent('onBeginRequest',$event); }
基于《Yii分析2:组件的事件机制》的分析,我们知道这里其实是在调用一个onBeginRequest的方法,而这个方法从哪里来呢,回到《Yii分析1:web程序入口(2)》 ,在CreateApplication时,注册了一个组件request,也就是CHttpRequest,这个组件的初始化代码如下:
/** * Initializes the application component. * This method overrides the parent implementation by preprocessing * the user request data. */ public function init() { parent::init(); $this->normalizeRequest(); } /** * Normalizes the request data. * This method strips off slashes in request data if get_magic_quotes_gpc() returns true. * It also performs CSRF validation if {@link enableCsrfValidation} is true. */ protected function normalizeRequest() { // normalize request if(get_magic_quotes_gpc()) { if(isset($_GET)) $_GET=$this->stripSlashes($_GET); if(isset($_POST)) $_POST=$this->stripSlashes($_POST); if(isset($_REQUEST)) $_REQUEST=$this->stripSlashes($_REQUEST); if(isset($_COOKIE)) $_COOKIE=$this->stripSlashes($_COOKIE); } //enableCsrfValidation初始值为false,因此onBeginRequest并没有在CWebApplication中注册 if($this->enableCsrfValidation) //注册事件处理函数 Yii::app()->attachEventHandler('onBeginRequest',array($this,'validateCsrfToken')); }
接下来是核心的“处理请求”的过程了,我们来看一下CWebApplication的代码:
/** * Processes the current request. * It first resolves the request into controller and action, * and then creates the controller to perform the action. */ public function processRequest() { //catchAllRequest用于yiilite,yiilite的使用请查看(http://www.yiiframework.com/doc/guide/1.1/zh_cn/topics.performance) if(is_array($this->catchAllRequest) && isset($this->catchAllRequest[0])) { $route=$this->catchAllRequest[0]; foreach(array_splice($this->catchAllRequest,1) as $name=>$value) $_GET[$name]=$value; } else //使用路由管理器来解析url,返回路由的信息 $route=$this->getUrlManager()->parseUrl($this->getRequest()); //将路由信息作为参数传给runController来运行相应的Controller $this->runController($route); }
run的执行就分析到这里,路由管理类和runcontroller我会再分两篇文章进行分析。
发表评论
-
[转]PHP的内存管理
2015-05-11 22:03 836原文出处:http://blogread.cn/it/ar ... -
《高性能PHP应用开发》读书笔记
2014-12-24 09:20 761注:只记录了一些关键点,部分知识点/内容请看到的朋友 ... -
[转]HTTP缓存算法
2013-01-04 14:34 1262原文地址:http://www.p ... -
【转】漫谈社区PHP 业务开发
2012-11-19 10:07 1076原文地址:http://stblog.baidu-tech.c ... -
Yii分析13:Yii核心组件之AssetManager
2012-04-10 00:37 4346我们通过使用来讲解CAssetManager的使用和工 ... -
Yii分析12:Yii核心web组件之会话类CHttpSession
2012-03-06 09:44 3196CHttpSession提供session级的数据管理和配置 ... -
Yii分析11:Yii核心组件之错误处理类CErrorHandler
2012-02-24 09:57 4045类如其名,CErrorHandler在Yii中主要的功能 ... -
Yii分析10:Yii核心组件之数据库类CDbConnection
2012-02-17 09:18 8462数据库类几乎是每个PHP框架必不可少的组件之一,Yii的 ... -
Yii分析9:CController控制视图(Cview)的展现
2011-11-30 00:01 4826《The Definitive Guide to ... -
[转]优酷网架构学习笔记
2011-11-22 10:22 1400原文地址:http://www.itivy.com/ivy/a ... -
[转]YouTube架构学习体会
2011-11-22 10:15 1182原文地址:http://www.itivy.com/ivy/a ... -
[转]深掘XSS漏洞场景之XSS Rootkit
2011-10-21 12:22 1316转载顿神大作:http://www.80sec.com/%E6 ... -
Yii分析7:runController的执行
2011-10-20 17:28 5948在《Yii分析4:run的执行》一文中,介绍了Yi ... -
关于PHP错误:unexpected T_PAAMAYIM_NEKUDOTAYIM
2011-10-08 16:23 1913PHP解析错误:Parse error: syntax err ... -
[推荐]基于PHP和MySQL的开源点击统计软件Piwik
2011-08-10 11:50 1688刚刚发现一款基于PHP和MySQL的开源点击统计软 ... -
PHP的is_callable和method_exists方法比较
2011-08-03 13:17 2148之前发过一篇关于is_callable的文章,主要是PHP手册 ... -
Yii分析6:CHttpRequest
2011-08-03 11:20 2841官方说明:CHttpRequest封装了$_SERVER变量, ... -
[转]10种方式实现跨域资源的共享
2011-07-27 10:50 1000原文地址:http://www.ued16 ... -
[转]高级PHP应用程序漏洞审核技术
2011-07-19 10:18 1851原文地址:http://code.google.com/p/p ... -
使用PHP的SESSION直接保存对象需要注意隐含的序列化
2011-06-23 14:12 3351昨天在调试代码时,在同一个sever上有两个版本的代码,刚开始 ...
相关推荐
Yii护照 安装 :light_bulb: 这是展示如何安装软件包的好地方,请参见下文: 跑步 $ composer require inquid/yii-passport 用法 :light_bulb: 这是显示一些用法示例的好地方! 变更日志 请看看 。 贡献 请看看 。...
yii-进程锁 防止脚本的多个副本同时运行。 使用 composer.json依赖项: " happyproff/yii-processlock " : " * " 注册应用程序组件: 'components' => [ . . . , 'processLock' => [ 'class' => '...
该扩展还依赖于最新版本的 ElFinder 2.0-rc1(2012 年 4 月 10 日)。 如何安装: 将此添加到您的 composer.json require 部分 " philippfrenzel/yii2elfinder " : " dev-master " , 之后将以下功能添加到您的...
yii2-swoole 为赋予 Yii2 框架协程异步能力而生。 后期开发会依赖 去实现功能,相信 Swoft 会是下一代优秀的框架。 此插件基于 swoole (v2.0) 底层实现的协程,改造 Yii2 的核心代码,使开发者无感知,以及在不改动...
yii-simplepie yii-simplepie 是用于解析 rss 提要的 yii 扩展: 简单派: simplepie 文档: 用法 在 yii 中安装扩展 下载所有文件并放入 yii 扩展文件夹,然后在 config/main.php 中添加以下代码 'simplepie' ...
Yii-QA简介(此项目目前已不再维护)感谢选择Yii-QA,基于框架基础实现的问答程序。 #意识到目前的急性时间有限,无法管理太多的额外项目,我准备合并现有手上的项目,集成在一个项目中,感谢支持!!!!!!!请关注:...
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 中...
使用 CKEditor 4+ 版本测试。 安装 将此小部件复制到扩展文件夹。 从下载 CKEditor 将 CKEditor 的文件粘贴到扩展资产文件夹。 用法 一、导入widget类文件 Yii :: import ( 'ext.yii-ckeditor.CKEditorWidget' )...
yii2 console 集成swoole 执行异步任务,例如注册邮件,发送短信 使用方法:http://blog.csdn.net/nextvary/article/details/79136058
yii-seo Yii PHP 框架的搜索引擎优化。 用法 布局中 <?php Yii::app()->controller->widget( 'vendor.crisu83.yii-seo.widgets.SeoHead', array( 'httpEquivs' => array( 'Content-Type' => 'text/html; ...
Yii 1 流日志 将 Yii 1 日志发送到 stdout/stderr - 创建用于与提供的 php-fpm/nginx Docker 堆栈一起使用 感谢 Haensel 为! 安装 通过作曲家安装: composer require neam/yii-streamlog:* 或者下载扩展,将src...
Arshaw 的 FullCalendar jQuery 插件的 Yii 扩展 作者:Alexey Samoylov ( )。 要求 PHP 5.4 Yii 1.x 例子 全局组件配置示例: 'components' => [ 'fullcalendar' => [ 'class' => 'ext.yii-fullcalendar....
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 应用程序。 该模板...
文件结构 程序结构及配置 入口文件index php流程 CApplication构造流程 Request组件初始化 Run 方法流程 Yii核心参考
yii-demo 我对 Yii 框架的扩展的演示。
yii2-schemadump 从现有数据库生成模式。演示版要求PHP 7.3或更高版本Yii 2.x安装composer require --dev jamband/yii2-schemadump用法在config / console.php中添加以下内容: return [ . . . 'components' => [ . ...
yii框架源码分析