应用是指请求处理中的执行上下文。它的主要任务是分析用户请求并将其分派到合适的控制器中以作进一步处理。 它同时作为服务中心,维护应用级别的配置。鉴于此,应用也叫做前端控制器

应用由 入口脚本 创建为一个单例对象。这个应用单例对象可以在任何地方通过 Yii::app() 访问。

1. 应用配置

默认情况下,应用是一个 CWebApplication 的实例。要自定义它,我们通常需要提供一个配置文件 (或数组) 以创建应用实例时初始化其属性值。自定义应用的另一种方式是继承 CWebApplication

配置是一个键值对数组。每个键代表应用实例中某属性的名字,每个值即相应属性的初始值。 例如,如下的配置设定了应用的 name 和 defaultController 属性。

array(
'name'=>'Yii Framework',
'defaultController'=>'site',
)

我们通常在一个单独的PHP 脚本(e.g.protected/config/main.php)中保存这些配置。在脚本中, 我们通过以下方式返回此配置数组:

return array(...);

要应用此配置,我们将配置文件的名字作为参数传递给应用的构造器,或像下面这样传递到Yii::createWebApplication() 。这通常在 入口脚本 中完成:

$app=Yii::createWebApplication($configFile);

2. 应用基础目录

应用基础目录指包含了所有安全敏感的PHP脚本和数据的根目录。默认状态下,它是一个位于含有入口脚本目录的名为 protected 的子目录。它可以通过设置 application configuration 中的 basePath 属性自定义。

在应用基础目录下的内容应该保护起来防止网站访客直接访问。对于 Apache HTTP 服务器, 这可以通过在基础目录中放置一个 .htaccess 文件很简单的实现。 .htaccess 内容如下:

deny from all

3. 应用组件

应用的功能可以通过其灵活的组件结构轻易地自定义或增强。应用管理了一系列应用组件,每个组件实现一特定功能。 例如,应用通过 CUrlManager 和 CHttpRequest 的帮助解析来自用户的请求。

通过配置应用的 components 属性, 我们可以自定义应用中用到的任何组件类及其属性值。例如,我们可以配置应用的 CMemCache 组件, 这样它就可以使用多个 memcache 服务器实现缓存:

array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
)

如上所示,我们在 components 数组中添加了 cache 元素。cache 元素表明此组件的类是 CMemCache, 他的servers 属性应依此初始化。

要访问一个应用组件,使用 Yii::app()->ComponentID ,其中的 ComponentID 是指组件的ID(例如Yii::app()->cache)。

应用的组件可以通过在其配置中设置 enabled 为 false 禁用。当我们访问被禁用的组件时将返回 Null。

4. 核心应用组件

Yii 预定义了一系列核心应用组件,提供常见 Web 应用中所用的功能。例如, request 组件用于解析用户请求并提供例如 URL,cookie 等信息。 通过配置这些核心组件的属性,我们可以在几乎所有的方面修改Yii 的默认行为。

下面我们列出了由 CWebApplication 预定义的核心组件。

5. 应用的生命周期

当处理用户请求时,应用将经历如下声明周期:

  1. 通过 CApplication::preinit() 预初始化应用;

  2. 设置类的自动装载器和错误处理;

  3. 注册核心类组件;

  4. 加载应用配置;

  5. 通过 CApplication::init() 初始化应用:

    • 注册应用行为;
    • 载入静态应用组件;
  6. 触发 onBeginRequest 事件;

  7. 处理用户请求:

    • 解析用户请求;
    • 创建控制器;
    • 运行控制器;
  8. 触发 onEndRequest 事件。

yii基础知识-应用的更多相关文章

  1. yii基础知识-

    控制器 是 CController 或其子类的实例.它在当用户请求时由应用创建. 当一个控制器运行时,它执行所请求的动作,动作通常会引入所必要的模型并渲染相应的视图. 动作 的最简形式,就是一个名字以 ...

  2. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  3. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  4. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  5. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  6. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  7. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  8. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  9. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

随机推荐

  1. vim编辑器的设置文件

    vim配置特点: 1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2.自动插入文件头 ,新建C.C++源文件时自动插入表头:包括文件名 ...

  2. NSDate显示和时区的关系

    在网上看到一篇介绍NSDate的博文.在它的“NSDate初始化“章节,说在使用  NSLog(@"当前时间 date = %@",[NSDate date]);时,显示出来的时间 ...

  3. PHP常用魔术方法(__set、__get魔术方法:)

    __set.__get魔术方法: //文件名:Object.php <?phpnamespace IMooc;class Object{ protected $array = array(); ...

  4. [Angular 2] Using the @Inject decorator

    TypeScript is used heavily as we build up our application, but TypeScript isn’t required. If you wan ...

  5. iOS 8 Auto Layout界面自动布局系列5-自身内容尺寸约束、修改约束、布局动画

    首先感谢众多网友的支持,最近我实在是事情太多,所以没有写太多.不过看到大家的反馈和评价,我还是要坚持挤出时间给大家分享我的经验.如果你对我写的东西有任何建议.意见或者疑问,请到我的CSDN博客留言: ...

  6. ViewPager实现页卡的3种方法(谷歌组件)

    ----方法一:---- 效果图: 须要的组件: ViewPager+PagerTabStrip 布局文件代码: <!--xmlns:android_custom="http://sc ...

  7. Dynamics CRM 常用 JS 方法集合

    JS部分 拿到字段的值 var value= Xrm.Page.getAttribute("attributename").getValue(); Xrm.Page.getAttr ...

  8. JS 事件冒泡整理 浏览器的事件流

    JavaScript与HTML的交互通过事件来实现.而浏览器的事件流是一个非常重要的概念.不去讨论那些古老的浏览器有事件捕获与事件冒泡的争议, 只需要知道在DOM2中规定的事件流包括了三个部分,事件捕 ...

  9. css3 content画出各种图形

    原链接:http://www.phpjz.cn/web/201311/1700.html 之前看到一些网站用户content这个词,觉得很奇怪,原来是css3新增的一个样式,发现还挺好用的,特别是用移 ...

  10. Asp.Net EF Code First 简单入门

    今天在上班期间花了点时间学习了一下微软的EntityFramework Code First技术,这篇文章只是简单的入门,不多废话,下面直入主题. 一.首先添加一个解决方案,接着添加一个web网站,D ...