Yii框架官方教程增补篇6——基础知识:应用、组件、配置、生命周期

Yii框架官方教程增补篇6——基础知识:应用、组件、配置、生命周期

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

应用由入口脚本创建为一个单例对象。这个应用单例对象可以在任何地方通过 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);

提示: 如果应用配置非常复杂,我们可以把它分割为若干文件,每个文件返回配置数组中的一部分。 然后,在主配置文件中,我们调用PHP的 include() 包含其余的配置文件并把它们合并为一个完整的配置数组。

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。

提示: 默认情况下,应用组件会按需创建。这意味着一个应用的组件如果没有在一个用户请求中被访问,它可能根本不被创建。 因此,如果一个应用配置了很多组件,其总体性能可能并不会下降。有的应用组件 (例如 CLogRouter) 可能需要在无论它们是否被访问的情况下都要被创建。 要实现这个,需将其ID列在应用的preload 属性里。

4. 核心应用组件

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 解析和创建相关功能

  • user: CWebUser – 提供当前用户的识别信息。

  • themeManager: CThemeManager – 管理主题。

5. 应用的生命周期

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

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

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

  3. 注册核心类组件;

  4. 加载应用配置;

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

  • 注册应用行为;

  • 载入静态应用组件;

触发 onBeginRequest 事件;

处理用户请求:

  • 解析用户请求;

  • 创建控制器;

  • 运行控制器;

触发 onEndRequest 事件。

yii执行流程

转载于:https://my.oschina.net/tlkt/blog/210327

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109879.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 转一篇难得的好文章-CPU流水线的探秘之旅

    转一篇难得的好文章-CPU流水线的探秘之旅作为程序员,CPU在我们的工作中扮演了核心角色,因此了解处理器内部的工作方式对程序员来说不无裨益。  CPU是如何工作的呢?一条指令执行需要多长时间?当我们讨论某个新款处理器拥有12级流水线还是18级流水线,甚至是更深的31级流水线时,这到些都意味着什么呢?  应用程序通常会将CPU看作是黑盒子。程序中的指令按照顺序依次进入CPU,执行完之后再按顺序依次从C

    2022年8月20日
    13
  • 详解java人力外包的费用组成

    详解java人力外包的费用组成根据IDC的统计数字,在所有软件开发类人才的需求中,对java工程师的需求达到全部需求量的60%~70%,也就是说,很多企业的信息化建设都离不开java开发人员。但面对成本费用、灵活用工、编制限制、劳务纠纷等问题,包括BAT在内的很多大型知名企业都会与软件人力外包公司合作来引进java人才。那么什么是java人力外包?java人力外包指的是由用人企业向软件人力外包公司提出java方面的用人需求,包括人数、技能要求、到岗时间、项目周期、预算等,软件人力外包公司通过外派的方式将符合要求的java人才提供给

    2022年5月19日
    104
  • form layui vue 和_layui是基于vue的吗?「建议收藏」

    form layui vue 和_layui是基于vue的吗?「建议收藏」layui不是基于vue的。layui是一款绝对开源和免费的前端UI框架,遵循原生“HTML/CSS/JS”的书写与组织形式;它虽然外在极简,但是内容丰富,里面包含众多组件从核心代码到API都非常适合界面的快速开发。layui不是基于vue的。layui(谐音:类UI)是一款采用自身模块规范编写的前端UI框架,遵循原生HTML/CSS/JS的书写与组织形式,门槛极低,拿来即用。lay…

    2022年6月25日
    26
  • Unity 3D游戏开发学习教程

    Unity 3D游戏开发学习教程用C#用Unity3D制作游戏你会学到:您将学习3D游戏开发基础知识,以使用Unity3D引擎推进事物。到本课程结束时,他们将可以轻松制作任何类型的游戏,无论是3D还是2DMP4|视频:h264,1280×720|音频:AAC,44.1KHz,2Ch语言:英语+中英文字幕(根据原英文字幕机译更准确)|时长:87节课(11h32m)|大小解压后:5.86GB描述用Unity3D开发3D游戏《2021年》是一门结构完善的高级UnityC#课程,专为完全…

    2022年9月15日
    0
  • 同步fifo的verilog代码_verilog 异步复位

    同步fifo的verilog代码_verilog 异步复位  本文大部分内容来自CliffordE.Cummings的《SimulationandSynthesisTechniquesforAsynchronous FIFODesign》,经过自己的一些改变,理论部分为转载,代码自己完成。一、FIFO简介  FIFO是英文FirstInFirstOut的缩写,是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部…

    2022年8月13日
    3
  • kafuka资料学习

    kafuka资料学习http://blog.csdn.net/hmsiwtv/article/details/46960053

    2022年4月30日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号