应用是指请求处理中的执行上下文。它的主要任务是分析用户请求并将其分派到合适的控制器中以做进一步处理。 它同时做为服务中心,维护应用级别的配置。鉴于此,应用也叫作前端控制器
。javascript
应用由 入口脚本 建立为一个单例对象。这个应用单例对象能够在任何地方经过 Yii::app() 访问。php
默认状况下,应用是一个 CWebApplication 的实例。要自定义它,咱们一般须要提供一个配置文件 (或数组) 以建立应用实例时初始化其属性值。自定义应用的另外一种方式是继承 CWebApplication。前端
配置是一个键值对数组。每一个键表明应用实例中某属性的名字,每一个值即相应属性的初始值。 例如,以下的配置设定了应用的 name 和 defaultController 属性。java
array( 'name'=>'Yii Framework', 'defaultController'=>'site', )
咱们一般在一个单独的PHP 脚本(e.g.protected/config/main.php
)中保存这些配置。在脚本中, 咱们经过如下方式返回此配置数组:数据库
return array(...);
要应用此配置,咱们将配置文件的名字做为参数传递给应用的构造器,或像下面这样传递到Yii::createWebApplication() 。这一般在 入口脚本 中完成:apache
$app=Yii::createWebApplication($configFile);
应用基础目录指包含了全部安全敏感的PHP脚本和数据的根目录。默认状态下,它是一个位于含有入口脚本目录的名为 protected
的子目录。它能够经过设置 application configuration 中的 basePath 属性自定义。api
在应用基础目录下的内容应该保护起来防止网站访客直接访问。对于 Apache HTTP 服务器, 这能够经过在基础目录中放置一个 .htaccess
文件很简单的实现。 .htaccess
内容以下:数组
deny from all
应用的功能能够经过其灵活的组件结构轻易地自定义或加强。应用管理了一系列应用组件,每一个组件实现一特定功能。 例如,应用经过 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。
Yii 预约义了一系列核心应用组件,提供常见 Web 应用中所用的功能。例如, request 组件用于解析用户请求并提供例如 URL,cookie 等信息。 经过配置这些核心组件的属性,咱们能够在几乎全部的方面修改Yii 的默认行为。
下面咱们列出了由 CWebApplication 预约义的核心组件。
assetManager: CAssetManager - 管理私有资源文件的发布。
authManager: CAuthManager - 管理基于角色的访问控制 (RBAC).
cache: CCache - 提供数据缓存功能。注意,你必须指定实际的类(例如CMemCache, CDbCache)。 不然,当你访问此组件时将返回 NULL。
clientScript: CClientScript - 管理客户端脚本 (javascripts 和 CSS).
coreMessages: CPhpMessageSource - 提供 Yii 框架用到的核心信息的翻译。
db: CDbConnection - 提供数据库链接。注意,使用此组件你必须配置其 connectionString 属性。
errorHandler: CErrorHandler - 处理未捕获的 PHP 错误和异常。
format: CFormatter - 格式化数值显示。此功能从版本 1.1.0 起开始提供。
messages: CPhpMessageSource - 提供Yii应用中使用的信息翻译。
request: CHttpRequest - 提供关于用户请求的信息。
securityManager: CSecurityManager - 提供安全相关的服务,例如散列,加密。
session: CHttpSession - 提供session相关的功能。
statePersister: CStatePersister - 提供全局状态持久方法。
urlManager: CUrlManager - 提供 URL 解析和建立相关功能
themeManager: CThemeManager - 管理主题。
当处理用户请求时,应用将经历以下声明周期:
经过 CApplication::preinit() 预初始化应用;
设置类的自动装载器和错误处理;
注册核心类组件;
加载应用配置;
经过 CApplication::init() 初始化应用:
触发 onBeginRequest 事件;
处理用户请求:
触发 onEndRequest 事件。