Yii 是一个高性能,基于组件的 PHP 框架,用于快速开发现代 Web 应用程序。名字 Yii (读作 易)在中文里有“极致简单与不断演变”两重含义,也可看作 Yes It Is! 的缩写。Yii 最适合做什么?Yii 是一个通用的 Web 编程框架,即可以用于开发各种用 PHP 构建的 Web 应用。
在开发和维护一个数据库驱动的应用程序时,数据库的结构会随代码的改变而改变。例如,在开发应用程序的过程中,会增加一张新表且必须得加进来;在应用程序被部署到生产环境后,需要建立一个索引来提高查询的性能等等。
注意:该章节还在开发中。Active Record (活动记录,以下简称 AR)提供了一个面向对象的接口,用以访问数据库中的数据。一个 AR 类关联一张数据表,每个 AR 对象对应表中的一行,对象的属性(即 AR 的特性 Attribute)映射到数据行的对应列。一条活动记录(AR 对象)对应数据表的一行,AR 对象的属性则映射该行的相应列。
查询构建器建立在 Database Access Objects 基础之上,可让你创建程序化的、DBMS 无关的 SQL 语句。相比于原生的 SQL 语句,查询构建器可以帮你写出可读性更强的 SQL 相关的代码,并生成安全性更强的 SQL 语句。使用查询构建器通常包含以下两个步骤:创建一个 [[yii\db\Query]] 对象来代表一条 SELECT SQL 语句的不同子句(例如 SELECT, FROM)。
Yii 包含了一个建立在 PHP PDO 之上的数据访问层 (DAO). DAO为不同的数据库提供了一套统一的API. 其中ActiveRecord 提供了数据库与模型(MVC 中的 M,Model) 的交互,QueryBuilder 用于创建动态的查询语句. DAO提供了简单高效的SQL查询,可以用在与数据库交互的各个地方.Yii 默认支持以下数据库 (DBMS):MySQLMariaDBSQLitePostgreSQLCUBRID: 版本 >= 9.3 .
依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象。Martin 的文章 已经解释了 DI 容器为什么很有用。这里我们主要讲解 Yii 提供的 DI 容器的使用方法。依赖注入 Yii 通过 [[yii\di\Container]] 类提供 DI 容器特性。它支持如下几种类型的依赖注入:构造方法注入;Setter 和属性注入;PHP 回调注入.
服务定位器是一个了解如何提供各种应用所需的服务(或组件)的对象。在服务定位器中,每个组件都只有一个单独的实例,并通过 ID 唯一地标识。用这个 ID 就能从服务定位器中得到这个组件。在 Yii 中,服务定位器是 [[yii\di\ServiceLocator]] 或其子类的一个实例。最常用的服务定位器是application(应用)对象,可以通过 \Yii::$app 访问。
别名用来表示文件路径和 URL,这样就避免了在代码中硬编码一些绝对路径和 URL。一个别名必须以 @ 字符开头,以区别于传统的文件路径和 URL。Yii 预定义了大量可用的别名。例如,别名 @yii 指的是 Yii 框架本身的安装目录,而 @web 表示的是当前运行应用的根 URL。
Yii 依靠类自动加载机制来定位和包含所需的类文件。它提供一个高性能且完美支持PSR-4 标准(中文汉化)的自动加载器。该自动加载器会在引入框架文件 Yii.php 时安装好。注意:为了简化叙述,本篇文档中我们只会提及类的自动加载。不过,要记得文中的描述同样也适用于接口和Trait(特质)的自动加载哦。
在 Yii 中,创建新对象和初始化已存在对象时广泛使用配置。配置通常包含被创建对象的类名和一组将要赋值给对象属性的初始值。还可能包含一组将被附加到对象事件上的句柄。和一组将被附加到对象上的行为。以下代码中的配置被用来创建并初始化一个数据库连接:$config = [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=127.0.0.1;
行为是 [[yii\base\Behavior]] 或其子类的实例。行为,也称为 mixins,可以无须改变类继承关系即可增强一个已有的 [[yii\base\Component|组件]] 类功能。当行为附加到组件后,它将“注入”它的方法和属性到组件,然后可以像访问组件内定义的方法和属性一样访问它们。此外,行为通过组件能响应被触发的事件,从而自定义或调整组件正常执行的代码。
事件可以将自定义代码“注入”到现有代码中的特定执行点。附加自定义代码到某个事件,当这个事件被触发时,这些代码就会自动执行。例如,邮件程序对象成功发出消息时可触发 messageSent 事件。如想追踪成功发送的消息,可以附加相应追踪代码到 messageSent 事件。Yii 引入了名为 [[yii\base\Component]] 的基类以支持事件。
在 PHP 中,类的成员变量也被称为属性(properties)。它们是类定义的一部分,用来表现一个实例的状态(也就是区分类的不同实例)。在具体实践中,常常会想用一个稍微特殊些的方法实现属性的读写。例如,如果有需求每次都要对 label 属性执行 trim 操作,就可以用以下代码实现:$object->label = trim($label);
组件是 Yii 应用的主要基石。是 [[yii\base\Component]] 类或其子类的实例。三个用以区分它和其它类的主要功能有:属性(Property)事件(Event)行为(Behavior)或单独使用,或彼此配合,这些功能的应用让 Yii 的类变得更加灵活和易用。
Yii 提供了一个强大的日志框架,这个框架具有高度的可定制性和可扩展性。使用这个框架,你可以轻松地记录各种类型的消息,过滤它们,并且将它们收集到不同的目标,诸如文件,数据库,邮件。使用 Yii 日志框架涉及下面的几个步骤:在你代码里的各个地方记录 log messages;在应用配置里通过配置 log targets 来过滤和导出日志消息;
Yii 内置了一个[[yii\web\ErrorHandler|error handler]]错误处理器,它使错误处理更方便,Yii 错误处理器做以下工作来提升错误处理效果:所有非致命 PHP 错误(如,警告,提示)会转换成可获取异常;异常和致命的 PHP 错误会被显示,在调试模式会显示详细的函数调用栈和源代码行数。支持使用专用的 控制器操作 来显示错误;支持不同的错误响应格式;
[译注:Session 中文翻译为会话,Cookie 有些翻译成小甜饼,不贴切,两个单词保留英文] Sessions 和 cookies 允许数据在多次请求中保持,在纯 PHP 中,可以分别使用全局变量$_SESSION 和$_COOKIE 来访问,Yii 将 session 和 cookie 封装成对象并增加一些功能,可通过面向对象方式访问它们。
当应用完成处理一个请求后, 会生成一个[[yii\web\Response|response]]响应对象并发送给终端用户响应对象包含的信息有 HTTP 状态码,HTTP 头和主体内容等, 网页应用开发的最终目的本质上就是根据不同的请求构建这些响应对象。
一个应用的请求是用 [[yii\web\Request]] 对象来表示的,该对象提供了诸如请求参数(译者注:通常是 GET 参数或者 POST 参数)、HTTP 头、cookies 等信息。默认情况下,对于一个给定的请求,你可以通过 request application component 应用组件([[yii\web\Request]] 类的实例)获得访问相应的请求对象。在本章节,我们将介绍怎样在你的应用中使用这个组件。
关注时代Java