运行机制概述
每一个
应用程序启动一个近似过程的时候开始
处理HTTP请求。
用户提交一个请求指向入口
脚本的Web /的index.php。
输入脚本将加载
配置数组并
创建一个应用程序实例来处理请求。
应用程序通过请求(请求)应用程序
组件解析请求的
路由。
应用程序创建一个
控制器(控制器)实例来处理请求。
控制器创建一个动作(
操作)实例,并为该操作
执行相关的过滤器(访问过滤器)。
如果任何筛选器验证失败,则操作将被
取消。
如果所有的过滤器都被传递,动作将被执行。
一个动作将加载一个数据模型,通常是从数据库加载的。
该操作将呈现视图(视图)并向其提供所需的数据模型。
呈现的结果将返回到响应(响应)应用程序组件。
响应组件将呈现结果发送回用户的
浏览器。
下面的示意图
显示了应用程序如何处理请求。
引导引导(引导)
引导的引导是一个过程,preprepares环境启动应用程序的解析和处理新接受请求之前。开机启动将在两地进行:入口脚本(
登录脚本)和应用学科(应用)。
在入口脚本类
文件自动装载机(简称类自动装弹机,)需要登记所有的类库。这主要包括作曲家自动加载器加载通过其autoload.php文件,和一自动加载器加载通过Yii类。之后,入口脚本将加载该应用程序的配置(配置)和创建应用程序的本体实例。
在应用程序主体的构造
函数中,执行以下引导
工作:
打电话给一库应用::Load()
方法(预初始化),配置一些高优先级的应用
属性,如Yii 应用:基础属性:
修改表情。
登记一基础应用程序:。
通过给定的应用程序配置初始化应用程序的各种属性。
通过调用Yii 基础应用::init(初始化)()方法,它要求一库应用::自举()来运行启动组件。
负载的
扩展列表文件(扩展清单文件)供应商/ yiisoft / extensions.php。
为每个扩展声明创建并运行引导组件(引导组件)。
创建并运行在应用程序的自举属性中声明的各种应用程序组件和各种模块(模块)组件(如果有的话)。
因为在处理每个请求之前必须进行引导工作,因此尽可能轻的处理流程是非常重要的。请尽可能
优化这一
步骤。
请不要登记太多的引导组件。要使用它,只有当他需要在所有的HTTP请求处理生命周期的工作,让我们使用这种方法的一个例子:一个模块需要登记额外的URL解析规则,所以应该在应用程序的启动属性列,这样的URL解析规则可以在解析请求生效。换句话说,对
性能的需求,除了一些操作如URL解析,大多数部件应装上而不是放在引导过程的需求。
在生产环境中,可以打开字节码缓存,如APC,以进一步减少加载和解析PHP文件所需的时间。
一些大型应用程序包含非常复杂的应用程序配置,可以分成许多较小的配置文件。在这一点上,您可以考虑在入口脚本创建应用程序实例之前缓存整个配置数组并直接从缓存中加载它。
Yii的输入文件
我们在这里使用第三方
插件配置
管理:管理marcovwout,Yii的配置,我不谈细节。剩下的就是建立一些基本的全局变量,Yii:createwebapplication:里面的阵列来配置,然后调用run方法,Web应用程序不只是跑起来,是最抽象的是,我在容器中
介绍了相应的配置,然后应用程序可以根据配置的正常运行。
说yiibase中比较重要的两种方法(进口,加载)
Here we use a third party configuration management plug-in: marcovwout, to manage the configuration of Yii, and I don't talk about the details.The rest is that some basic global variables are set up.To Yii: createWebApplication: inside the incoming configuration of the array, and then call the run method, a web application is not just run up, is the abstract to the top is that I introduced the corresponding configuration into a container, then the application can be based on the normal operation of the configuration.
路线
当入口脚本调用Yii
网络应用::运行()方法,它的第一个操作解析输入请求,然后实例化相应的控制器的操作来处理请求。这一过程称为启动路由(路由)。在中国,它是一个动词和一个名词。
解析路由
路由的第一步是分析传入的请求到一个路由。正如我们所描述的控制器(控制器)部分,路由是用来定位控制器的运行
地址。这个过程是通过Yii 网络要求实施::
解决()请求的应用程序组件的方法调用URL经理本质上做要求的分辨率。
默认情况下,传入的请求包含一个
参数命名为R,其值是路由。但如果一网络 urlmanager::enableprettyurl
启用,更多的处理将在请求的路由确定。具体细节,请参阅解析和生成部分的URL。
如果一个
路径最终待定,要求组件将扔掉一网络 notfoundhttpexception例外(译:著名的404)。
默认路由
如果传入的请求并没有提供一个具体的路线,这通常是一个
网页的请求,Yii 网络应用程序指定的默认路由::缺省属性将在这个时候启用。此属性的默认值是
网站/索引,它指向的站点控制器索引操作。您可以在应用程序配置这样的
调整这个属性的值:
返回{
…
缺省= >主 /索引,
};
包罗万象的路由(全截取路由)
有时,你想暂时调整您的Web应用程序的
维护模式,所有的请求都会显示相同的信息页面。当然,有许多方法来实现这一
目标。做到这一点的最简单和最快的方式是
设置一网络应用:在应用程序配置包罗万象的性质:
返回{
…
包罗万象= > { 'site /离线},
};
通用属性需要在数组做参数传递。数组的第一个元素是路由,其余元素将以name值对的形式指定。
当通用属性设置,它将取代所有的路线是从输入请求的解析。如果这是在以前的
文本设置,操
作用于处理所有传入的请求将同一网站/离线。
创建一个操作
一旦确定了请求路由,下一步是创建一个操作(action)对象,该对象用于调用路由。
该路径可以通过斜杠内部划分为多个片段,并持有一个栗子,站点的索引可以分解为站点和索引的两部分,每个片段是指向模块(模块)、控制器(控制器)或操作(操作)的id。
从路由的第一段,应用程序将通过以下过程创建模块(如果有的话)、控制器和操作:
将应用程序主题设置为当前模块。
检查当前模块的Yii 基础模块::controllermap是否包含当前ID。如果这样,控制器对象是基于表中所创建的配置,然后跳到步骤五执行路线的后续段。
检查是否标识点在Yii 基础模块在模块列表模块:在当前模块属性模块。如果是,将模块表配置根据新创建的模块创建一个对象,然后对环境模块,回踩两路径分析。
将id作为控制器ID并创建一个控制器对象。
控制器将寻找他的Yii 库控制器当前ID::行动()。如果可以找到它,它会创建一个操作对象,根据配置的映射表。否则,控制器将尝试创建一个相应的行操作(内联操作),它与id相对应,并由动作方法定义。
在上面的步骤中,如果出现任何
错误,Yii 网络 notfoundhttpexception将抛出,说明路由启动过程失败。