diff --git a/docs/guide-zh-CN/intro-upgrade-from-v1.md b/docs/guide-zh-CN/intro-upgrade-from-v1.md index 83a9cc5..0b0449f 100644 --- a/docs/guide-zh-CN/intro-upgrade-from-v1.md +++ b/docs/guide-zh-CN/intro-upgrade-from-v1.md @@ -1,25 +1,23 @@ 从 Yii 1.1 升级 =============== -2.0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,在本指南中你将会了解两个版本间主要的不同之处。 +2.0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,通过本指南你将会了解两个版本间主要的不同之处。 -如果你之前没有用过 Yii 1.1, 可以直接跳过本章,直接从"[入门篇](start-installation.md)"开始读起。 +如果你之前没有用过 Yii 1.1,可以跳过本章,直接从"[入门篇](start-installation.md)"开始读起。 -请注意,Yii 2.0 引入了很多本章节并没有涉及到的新功能。强烈建议你通读整部权威指南,来了解所有新功能特性。这样可能会发现一些以前你要自己开发的功能,而它们现在已经被包含在核心代码中了。 +请注意,Yii 2.0 引入了很多本章并没有涉及到的新功能。强烈建议你通读整部权威指南来了解所有新特性。这样有可能会发现一些以前你要自己开发的功能,而现在已经被包含在核心代码中了。 安装 ------------ -Yii 2.0 完全拥抱 [Composer](https://getcomposer.org/),它是事实上的 PHP 包管理工具。核心框架以及扩展的安装都通过 Composer 来处理。想要了解更多如何安装 Yii 2.0 -请参阅本指南的 [安装 Yii](start-installation.md) 章节。如果你想创建新扩展,或者把你已有的 Yii 1.1 的扩展改写成兼容 -2.0 的版本,你可以参考 [创建扩展](extend-creating-extensions.md) 章节。 +Yii 2.0 完全拥抱 [Composer](https://getcomposer.org/),它是事实上的 PHP 包管理工具。核心框架以及扩展的安装都通过 Composer 来处理。想要了解更多如何安装 Yii 2.0 请参阅本指南的 [安装 Yii](start-installation.md) 章节。如果你想创建新扩展,或者把你已有的 Yii 1.1 的扩展改写成兼容 2.0 的版本,你可以参考 [创建扩展](extend-creating-extensions.md) 章节。 PHP 需求 ---------------- -Yii 2.0 需要 PHP 5.4 或以上版本,该版本相对于 Yii 1.1 所需求的 PHP 5.2 而言有巨大的改进。因此在语言层面上有很多的值得注意的不同之处。下面是 PHP 层的主要变化汇总: +Yii 2.0 需要 PHP 5.4 或更高版本,该版本相对于 Yii 1.1 所需求的 PHP 5.2 而言有巨大的改进。因此在语言层面上有很多的值得注意的不同之处。下面是 PHP 层的主要变化汇总: - [命名空间](http://php.net/manual/zh/language.namespaces.php) - [匿名函数](http://php.net/manual/zh/functions.anonymous.php) @@ -35,7 +33,7 @@ Yii 2.0 需要 PHP 5.4 或以上版本,该版本相对于 Yii 1.1 所需求的 命名空间 --------- -Yii 2.0 里最明显的改动就数命名空间的使用了。几乎每一个核心类都引入了命名空间,比如 `yii\web\Request`。1.1 版用于类名前的字母 “C” 已经不再使用。当前的命名规范与目录结构相吻合。比如,`yii\web\Request` 就表明对应的类文件是 Yii 框架文件夹下的 `web/Request.php` 文件。 +Yii 2.0 里最明显的改动就数命名空间的使用了。几乎每一个核心类都引入了命名空间,比如 `yii\web\Request`。1.1 版用于类名前的字母 “C” 已经不再使用。当前的命名规范与目录结构相吻合。例如,`yii\web\Request` 就表明对应的类文件是 Yii 框架文件夹下的 `web/Request.php` 文件。 (有了 Yii 的类自动加载器,你可以直接使用全部核心类而不需要显式包含具体文件。) @@ -43,18 +41,15 @@ Yii 2.0 里最明显的改动就数命名空间的使用了。几乎每一个核 组件(Component)与对象(Object) -------------------- -Yii 2.0 把 1.1 里的 `CComponent` 类拆分成了两个类:[[yii\base\Object]] 和 [[yii\base\Component]]。[[yii\base\Object|Object]] -类是一个轻量级的基类,你可以通过 getters 和 setters 来定义 [object 的属性](concept-properties.md)。[[yii\base\Component|Component]] -类继承自 [[yii\base\Object|Object]],同时进一步支持 [事件](concept-events.md) 和 [行为](concept-behaviors.md)。 +Yii 2.0 把 1.1 里的 `CComponent` 类拆分成了两个类:[[yii\base\Object]] 和 [[yii\base\Component]]。[[yii\base\Object|Object]] 类是一个轻量级的基类,你可以通过 getters 和 setters 来定义 [object 的属性](concept-properties.md)。[[yii\base\Component|Component]] 类继承自 [[yii\base\Object|Object]],同时进一步支持 [事件](concept-events.md) 和 [行为](concept-behaviors.md)。 -如果你的类不需要用到事件或行为的功能,应该考虑使用 [[yii\base\Object|Object]] 类作为基类。这通常是表示基本数据结构的类。 +如果你不需要用到事件或行为,应该考虑使用 [[yii\base\Object|Object]] 类作为基类。这通常是表示基本数据结构的类。 对象的配置 -------------------- -[[yii\base\Object|Object]] 类引入了一种统一对象配置的方法。所有 [[yii\base\Object|Object]] -的子类都应该用以下方法声明它的构造方法(如果需要的话),以正确配置它自身: +[[yii\base\Object|Object]] 类引入了一种统一对象配置的方法。所有 [[yii\base\Object|Object]] 的子类都应该用以下方法声明它的构造方法(如果需要的话),以正确配置它自身: ```php class MyClass extends \yii\base\Object @@ -75,8 +70,7 @@ class MyClass extends \yii\base\Object } ``` -在上面的例子里,构造方法的最后一个参数必须输入一个配置数组,包含一系列用于在方法结尾初始化相关属性的键值对。你可以重写 -[[yii\base\Object::init()|init()]] 方法来执行一些需要在配置生效后进行的初始化工作。 +在上面的例子里,构造方法的最后一个参数必须输入一个配置数组,包含一系列用于在方法结尾初始化相关属性的键值对。你可以重写 [[yii\base\Object::init()|init()]] 方法来执行一些需要在配置生效后进行的初始化工作。 你可以通过遵循以下约定俗成的编码习惯,来使用配置数组创建并配置新的对象: @@ -88,14 +82,13 @@ $object = Yii::createObject([ ], [$param1, $param2]); ``` -更多有关配置的细节可以在 [配置](concept-configurations.md) 章节找到。 +更多有关配置的细节可以在[配置](concept-configurations.md)章节找到。 事件(Event) ------ -在 Yii 1 中,通常通过定义 `on` 开头的方法(例如 `onBeforeSave`)来创建事件。而在 Yii 2 中,你可以使用任意的事件名了。同时通过调用 -[[yii\base\Component::trigger()|trigger()]] 方法来触发相关事件: +在 Yii 1 中,通常通过定义 `on` 开头的方法(例如 `onBeforeSave`)来创建事件。而在 Yii 2 中,你可以使用任意的事件名了。同时通过调用 [[yii\base\Component::trigger()|trigger()]] 方法来触发相关事件: ```php $event = new \yii\base\Event; @@ -110,17 +103,15 @@ $component->on($eventName, $handler); // $component->off($eventName, $handler); ``` -事件功能还有更多增强之处。要了解它们,请查看[事件(Event)](concept-events.md)章节。 +事件功能还有更多增强之处。要了解它们,请查看[事件](concept-events.md)章节。 路径别名(Path Alias) ------------ -Yii 2.0 将路径别名的应用扩大至文件/目录路径和 URL。Yii 2.0 中路径别名必须以 `@` 符号开头,以区别于普通文件目录路径或 URL。 -例如 `@yii` 就是指向 Yii 安装目录的别名。绝大多数的 Yii 核心代码都支持别名。例如 [[yii\caching\FileCache::cachePath]] 就同时支持路径别名或普通的目录地址。 +Yii 2.0 将路径别名的应用扩大至文件/目录路径和 URL。Yii 2.0 中路径别名必须以 `@` 符号开头,以区别于普通文件目录路径或 URL。例如 `@yii` 就是指向 Yii 安装目录的别名。绝大多数 Yii 核心代码都支持别名。例如 [[yii\caching\FileCache::cachePath]] 就同时支持路径别名或普通的目录地址。 -路径别名也和类的命名空间密切相关。建议给每一个根命名空间定义一个路径别名,从而无须额外配置,便可启动 Yii 的类自动加载机制。例如,因为有 `@yii` 指向 Yii 安装目录,那类似 `yii\web\Request` -的类就能被 Yii 自动加载。同理,若你用了一个第三方的类库,如 Zend Framework,你只需定义一个名为 `@Zend` 的路径别名指向该框架的安装目录。之后 Yii 就可以自动加载任意 Zend Framework 中的类了。 +路径别名也和类的命名空间密切相关。建议给每一个根命名空间定义一个路径别名,从而无须额外配置,便可启动 Yii 的类自动加载机制。例如,因为有 `@yii` 指向 Yii 安装目录,那类似 `yii\web\Request` 的类就能被 Yii 自动加载。同理,若你用了一个第三方的类库,如 Zend Framework,你只需定义一个名为 `@Zend` 的路径别名指向该框架的安装目录。之后 Yii 就可以自动加载任意 Zend Framework 中的类了。 更多路径别名信息请参阅[路径别名](concept-aliases.md)章节。 @@ -128,7 +119,7 @@ Yii 2.0 将路径别名的应用扩大至文件/目录路径和 URL。Yii 2.0 视图(View) ----- -Yii 2 中视图最明显的改动是视图内的特殊变量 `$this` 不再指向当前控制器或小部件,而是指向*视图*对象,它是 2.0 中引入的全新概念。*视图*对象为 [[yii\web\View]] 的实例,他代表了 MVC 模式中的视图部分。如果你想要在视图中访问一个控制器或者小部件,你可以使用 `$this->context`。 +Yii 2 中视图最明显的改动是视图内的特殊变量 `$this` 不再指向当前控制器或小部件,而是指向**视图**对象,它是 2.0 中引入的全新概念。**视图**对象为 [[yii\web\View]] 的实例,他代表了 MVC 模式中的视图部分。如果你想要在视图中访问一个控制器或小部件,可以使用 `$this->context`。 要在其他视图里渲染一个局部视图,使用 `$this->render()`,而不是 `$this->renderPartial()`。`render()` 现在只返回渲染结果,而不是直接显示它,所以现在你必须显式地把它 **echo** 出来。像这样: @@ -169,7 +160,7 @@ public function scenarios() Yii 2.0 使用 [[yii\web\Controller]] 作为控制器的基类,类似于 1.1 的 `CWebController`。使用 [[yii\base\Action]] 作为操作类的基类。 -这些变化最明显的影响是,当你在写控制器操作的代码时,你应该返回(return)要渲染的内容而不是输出(echo)它: +这些变化最明显的影响是,当你在写控制器操作的代码时,应该返回(return)要渲染的内容而不是输出(echo)它: ```php public function actionView($id) @@ -189,9 +180,9 @@ public function actionView($id) 小部件(Widget) ------- -Yii 2.0 使用 [[yii\base\Widget]] 作为小部件基类,类似于1.1 的 `CWidget`。 +Yii 2.0 使用 [[yii\base\Widget]] 作为小部件基类,类似于 1.1 的 `CWidget`。 -为了让框架获得更好的 IDE 支持,Yii 2.0 引进了一个调用小部件的新语法。就是 [[yii\base\Widget::begin()|begin()]],[[yii\base\Widget::end()|end()]] 和 [[yii\base\Widget::widget()|widget()]] 三个静态方法,用法如下: +为了让框架获得更好的 IDE 支持,Yii 2.0 引进了一个调用小部件的新语法。包含 [[yii\base\Widget::begin()|begin()]],[[yii\base\Widget::end()|end()]] 和 [[yii\base\Widget::widget()|widget()]] 三个静态方法,用法如下: ```php use yii\widgets\Menu; @@ -209,15 +200,15 @@ $form = ActiveForm::begin([ ActiveForm::end(); ``` -更多细节请参阅 [小部件](structure-widgets.md)章节。 +更多细节请参阅[小部件](structure-widgets.md)章节。 主题(Theme) ------ -2.0 主题的运作方式跟以往完全不同了。它们现在基于**路径映射机制**,该机制会把一个源视图文件的路径映射到一个主题视图文件路径。举例来说,如果路径映射为 `['/web/views' => '/web/themes/basic']`,那么 `/web/views/site/index.php` 视图的主题修饰版就会是 `/web/themes/basic/site/index.php`。也因此让主题现在可以应用在任何视图文件之上,甚至是渲染控制器或小部件上下文环境之外的视图文件。 +2.0 主题的运作方式跟以往完全不同了。它们现在基于**路径映射机制**,该机制会把一个源视图文件的路径映射到一个主题视图文件路径。举例来说,如果路径映射为 `['/web/views' => '/web/themes/basic']`,那么 `/web/views/site/index.php` 视图经过主题修饰的版本就会是 `/web/themes/basic/site/index.php`。也因此让主题现在可以应用在任何视图文件之上,甚至是渲染控制器上下文环境之外的视图文件或小部件。 -同样,`CThemeManager` 组件已经被移除了。取而代之的是,`theme` 成为了 `view` 应用组件的一个可配置属性。 +同样,`CThemeManager` 组件已经被移除了。取而代之的 `theme` 成为了 `view` 应用组件的一个可配置属性。 更多细节请参考[主题](output-theming.md)章节。 @@ -227,10 +218,9 @@ ActiveForm::end(); 控制台应用现在如普通的 Web 应用程序一样,由控制器组成,控制台的控制器继承自 [[yii\console\Controller]],类似于 1.1 的 `CConsoleCommand`。 -运行控制台命令使用 `yii `,其中 `` 代表控制器的路由(如 `sitemap/index`)。额外的匿名参数传递到对应的控制器操作,而有名的参数根据 -[[yii\console\Controller::options()]] 的声明来解析。 +运行控制台命令使用 `yii `,其中 `` 代表控制器的路由(如 `sitemap/index`)。额外的匿名参数传递到对应的控制器操作方法,而有名的参数根据 [[yii\console\Controller::options()]] 的声明来解析。 -Yii 2.0 支持基于代码注释自动生成相关命令的帮助(help)信息。 +Yii 2.0 支持基于代码注释自动生成相的关命令行帮助(help)信息。 更多细节请参阅[控制台命令](tutorial-console.md)章节。 @@ -238,7 +228,7 @@ Yii 2.0 支持基于代码注释自动生成相关命令的帮助(help)信 国际化(I18N) ---- -Yii 2.0 移除了原来内置的日期格式器和数字格式器,为了支持 [PECL intl PHP module](http://pecl.php.net/package/intl) (PHP 的国际化扩展)模块的使用。 +Yii 2.0 移除了原来内置的日期格式器和数字格式器,为了支持 [PECL intl PHP module](http://pecl.php.net/package/intl)(PHP 的国际化扩展)的使用。 消息翻译现在由 `i18n` 应用组件执行。该组件管理一系列消息源,允许使用基于消息类别的不同消息源。 @@ -270,7 +260,7 @@ public function behaviors() 前端资源(Assets) ------ -Yii 2.0 引入了一个新的概念,称为*资源包*(Asset Bundle),以代替 1.1 的脚本包概念。 +Yii 2.0 引入了一个新的概念,称为**资源包**(Asset Bundle),以代替 1.1 的脚本包概念。 一个资源包是一个目录下的资源文件集合(如 JavaScript 文件、CSS 文件、图片文件等)。每一个资源包被表示为一个类,该类继承自 [[yii\web\AssetBundle]]。用 [[yii\web\AssetBundle::register()]] 方法注册一个资源包后,就使它的资源可被 Web 访问了,注册了资源包的页面会自动包含和引用资源包内指定的 JS 和 CSS 文件。 @@ -293,7 +283,7 @@ Yii 2.0 很多常用的静态助手类,包括: 表单 ----- -Yii 2.0 引进了*表单栏(field)*的概念,用来创建一个基于 [[yii\widgets\ActiveForm]]的表单。一个表单栏是一个由标签、输入框、错误消息(可能还有提示文字)组成的容器,被表示为 [[yii\widgets\ActiveField|ActiveField]] 对象。使用表单栏建立表单的过程比以前更整洁利落: +Yii 2.0 引进了**表单栏(field)**的概念,用来创建一个基于 [[yii\widgets\ActiveForm]]的表单。一个表单栏是一个由标签、输入框、错误消息(可能还有提示文字)组成的容器,被表示为 [[yii\widgets\ActiveField|ActiveField]] 对象。使用表单栏建立表单的过程比以前更整洁利落: ```php @@ -311,8 +301,7 @@ Yii 2.0 引进了*表单栏(field)*的概念,用来创建一个基于 [[yi 查询生成器(Query Builder) ------------- -Yii 1.1 中,查询语句的生成分散在多个类中,包括 `CDbCommand`,`CDbCriteria` 以及 `CDbCommandBuilder`。Yii 2.0 以 [[yii\db\Query|Query]] 对象的形式表示一个数据库查询,这个对象可以在 -[[yii\db\QueryBuilder|QueryBuilder]] 的帮助下于幕后生成 SQL 语句。例如: +Yii 1.1 中,查询语句的生成分散在多个类中,包括 `CDbCommand`,`CDbCriteria` 以及 `CDbCommandBuilder`。Yii 2.0 以 [[yii\db\Query|Query]] 对象的形式表示一个数据库查询,这个对象使用 [[yii\db\QueryBuilder|QueryBuilder]] 在幕后生成 SQL 语句。例如: ```php $query = new \yii\db\Query(); @@ -356,15 +345,15 @@ class Customer extends \yii\db\ActiveRecord } } ``` -现在你就可以通过调用 `$customer->orders` 来访问关联表中某用户的订单了。你还可以用以下代码进行一场定制查询条件的实时关联查询: +现在你就可以通过调用 `$customer->orders` 来访问关联表中某用户的订单了。你还可以用以下代码进行一场指定条件的实时关联查询: ```php $orders = $customer->getOrders()->andWhere('status=1')->all(); ``` -当贪婪加载一段关联关系时,Yii 2.0 和 1.1 的运作机理并不相同。具体来说,在 1.1 中,使用一条 JOIN 语句同时查询主表和关联表记录。在 Yii 2.0 中会使用两个没有 JOIN 的 SQL 语句:第一条语句取回主表记录,第二条通过主表记录经主键筛选后查询关联表记录。 +当贪婪加载一段关联关系时,Yii 2.0 和 1.1 的运作机理并不相同。具体来说,在 1.1 中使用一条 JOIN 语句同时查询主表和关联表记录。在 Yii 2.0 中会使用两个没有 JOIN 的 SQL 语句:第一条语句取回主表记录,第二条通过主表记录经主键筛选后查询关联表记录。 -当生成会返回大量记录的查询时,可以链式书写 [[yii\db\ActiveQuery::asArray()|asArray()]] 方法,这样会以数组的形式返回查询结果,而不必返回 +当生成返回大量记录的查询时,可以链式书写 [[yii\db\ActiveQuery::asArray()|asArray()]] 方法,这样会以数组的形式返回查询结果,而不必返回 [[yii\db\ActiveRecord|ActiveRecord]] 对象,这能显著降低因大量记录读取所消耗的 CPU 时间和内存。如: ```php @@ -389,8 +378,7 @@ public function init() 用户及身份验证接口(IdentityInterface) ------------------------------------- -1.1 中的 `CWebUser` 类现在被 [[yii\web\User]] 所取代,随之 `CUserIdentity` 类也不在了。与之相对的,为达到相同目的,你可以实现 -[[yii\web\IdentityInterface]] 接口,它使用起来更直观。在高级应用模版里提供了一个这么样的一个例子。 +1.1 中的 `CWebUser` 类现在被 [[yii\web\User]] 所取代,随之 `CUserIdentity` 类也不在了。与之相对的,为达到相同目的,你可以实现 [[yii\web\IdentityInterface]] 接口,它使用起来更直观。在高级应用模版里提供了一个这样的一个例子。 要了解更多细节请参考[认证(Authentication)](security-authentication.md),[授权(Authorization)](security-authorization.md)以及[高级应用模版](tutorial-advanced-app.md) 这三个章节。 @@ -408,9 +396,9 @@ Yii 2.0 的 URL 管理跟 1.1 中很像。一个主要的改进是现在的 URL ] ``` -请参考 [URL 解析和生成](runtime-url-handling.md) 章节,以了解更多细节。. +请参考[URL 解析和生成](runtime-url-handling.md) 章节,以了解更多细节。. 同时使用 Yii 1.1 和 2.x ---------------------- -如果你有一些遗留的 Yii 1.1 代码,需要跟 Yii 2.0 一起使用,可以参考 [1.1 和 2.0 共用](extend-using-v1-v2.md) 章节。 +如果你有一些遗留的 Yii 1.1 代码,需要跟 Yii 2.0 一起使用,可以参考 [1.1 和 2.0 共用](extend-using-v1-v2.md)章节。