- 浏览: 338482 次
- 性别:
- 来自: 北京
博客专栏
-
高性能PHP框架Yii分析...
浏览量:84869
文章分类
最新评论
-
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 883原文出处:http://blogread.cn/it/ar ... -
《高性能PHP应用开发》读书笔记
2014-12-24 09:20 793注:只记录了一些关键点,部分知识点/内容请看到的朋友 ... -
[转]HTTP缓存算法
2013-01-04 14:34 1349原文地址:http://www.p ... -
【转】漫谈社区PHP 业务开发
2012-11-19 10:07 1115原文地址:http://stblog.baidu-tech.c ... -
Yii分析13:Yii核心组件之AssetManager
2012-04-10 00:37 4394我们通过使用来讲解CAssetManager的使用和工 ... -
Yii分析12:Yii核心web组件之会话类CHttpSession
2012-03-06 09:44 3226CHttpSession提供session级的数据管理和配置 ... -
Yii分析11:Yii核心组件之错误处理类CErrorHandler
2012-02-24 09:57 4129类如其名,CErrorHandler在Yii中主要的功能 ... -
Yii分析10:Yii核心组件之数据库类CDbConnection
2012-02-17 09:18 8537数据库类几乎是每个PHP框架必不可少的组件之一,Yii的 ... -
Yii分析9:CController控制视图(Cview)的展现
2011-11-30 00:01 4874《The Definitive Guide to ... -
[转]优酷网架构学习笔记
2011-11-22 10:22 1444原文地址:http://www.itivy.com/ivy/a ... -
[转]YouTube架构学习体会
2011-11-22 10:15 1215原文地址:http://www.itivy.com/ivy/a ... -
[转]深掘XSS漏洞场景之XSS Rootkit
2011-10-21 12:22 1355转载顿神大作:http://www.80sec.com/%E6 ... -
Yii分析7:runController的执行
2011-10-20 17:28 6005在《Yii分析4:run的执行》一文中,介绍了Yi ... -
关于PHP错误:unexpected T_PAAMAYIM_NEKUDOTAYIM
2011-10-08 16:23 1957PHP解析错误:Parse error: syntax err ... -
[推荐]基于PHP和MySQL的开源点击统计软件Piwik
2011-08-10 11:50 1752刚刚发现一款基于PHP和MySQL的开源点击统计软 ... -
PHP的is_callable和method_exists方法比较
2011-08-03 13:17 2211之前发过一篇关于is_callable的文章,主要是PHP手册 ... -
Yii分析6:CHttpRequest
2011-08-03 11:20 2890官方说明:CHttpRequest封装了$_SERVER变量, ... -
[转]10种方式实现跨域资源的共享
2011-07-27 10:50 1060原文地址:http://www.ued16 ... -
[转]高级PHP应用程序漏洞审核技术
2011-07-19 10:18 1919原文地址:http://code.google.com/p/p ... -
使用PHP的SESSION直接保存对象需要注意隐含的序列化
2011-06-23 14:12 3389昨天在调试代码时,在同一个sever上有两个版本的代码,刚开始 ...
相关推荐
让我们深入了解一下Yii框架的执行流程及其部分源码分析。 1. **程序结构及配置** Yii的项目结构通常包含以下关键部分: - `protected`:存放应用的核心代码,如模型、控制器、配置文件等。 - `runtime`:运行时...
`CWebApplication` 的实例化后,其 `run()` 方法会被调用,开始执行整个 Web 应用的生命周期。 4. **CWebApplication 继承结构** `CWebApplication` 是一个Web 应用的核心组件,负责处理 HTTP 请求,管理路由,...
接着,使用Yii::createWebApplication函数创建了一个CWebApplication对象,并执行其run方法启动框架。 Yii类是YiiBase类的完全继承,它的成员和方法都是静态类型的。Yii类提供了许多静态方法,例如...
4. 项目配置:根据Yii框架的项目结构,可能还需要做一些配置工作,比如数据库连接、环境设置等。在PhpStorm中,我们可以通过运行环境的配置来实现,这通常在“Run/Debug Configurations”中进行设置。 5. 开发和...
YII框架中的filter过滤器是该框架提供的一个强大功能,它允许开发者在控制器动作执行之前或之后执行一段自定义的代码,用以完成如访问控制、性能监控、数据验证等任务。过滤器的实现方式可以是通过控制器类中的特定...
然而,通过创建一个具有可执行命令的公共方法的类,例如`yii2/rest/IndexAction`的`run`方法,可以构建一个利用链。 利用链的构造如下: 1. 实例化`yii2/rest/IndexAction`并调用`run`方法。 2. `run`方法间接调用`...
`registerClientScript`方法在CBaseListView的`run`方法中被调用,这个方法是用于注册需要在客户端执行的JavaScript脚本。在CListView中,`registerClientScript`调用了`registerCoreScript`,这一步骤确保了jQuery...
下面是关于Yii控制器中filter过滤器用法的详细知识点分析。 首先,Yii框架中的filter过滤器主要分为两大类:行为过滤器(Behavior Filter)和声明式过滤器(Declarative Filter)。行为过滤器以对象的形式存在,...
本文实例讲述了Yii框架函数简单用法。分享给大家供大家参考,具体如下: 1.redict return $this->redirect(['login']); redict其实是对于以下的封装 等同于 ... * @param bool $runValidation whether to perfo
4. 加载应用配置:应用配置包含了诸如数据库连接、组件配置、路由规则等信息。入口脚本会加载这些配置文件,以便应用在启动时能够应用这些配置信息。 5. 创建应用实例并配置:Yii框架允许创建Web应用和控制台应用两...
接下来,详细分析Yii中如何利用锁表防止并发导致的重复数据问题: 1. 写锁定防止重复数据插入 写锁定是一种比较强烈的锁定,它保证在一个事务中的写操作完成前,其他的读操作和写操作都会被阻塞。在Yii中,可以使用...
接着,我们来分析创建Yii框架的cronjob定时任务的具体步骤: 1. 首先,需要添加环境配置文件protected/config/console.php,这个文件负责配置Yii框架命令行应用的一些基本参数,包括基础路径(basePath)、应用名称...
免费提供长期更新服务,应用涉及可视化装修、促销转化、裂变分销、用户精细化管理、数据分析等多个维度,追求极致体验,全面赋能商家,为商家创造价值。 主要特性: 1、Leadshop开源系统,基于Yii2开发,支持...
4. **代码分析**:PHPStorm可以分析整个项目,找出可能的性能瓶颈、未使用的变量和过时的代码。 5. **代码对比**:比较不同版本的文件,理解代码更改历史。 6. **VCS集成**:利用版本控制系统进行代码版本管理,...
- 自定义外部工具的执行路径和参数,可以在 IDE 内部执行这些命令,提升开发流程的便利性。 9. **插件管理** - PHPStorm 的强大之处还在于其丰富的插件生态,通过 `Plugins` 可以安装和管理各种插件,增强 IDE ...