Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
edc292bd
Commit
edc292bd
authored
Jul 02, 2014
by
Yang Liu
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #6 from AbrahamGreyson/master
Guide-zh-CN intro-upgrade-from-v1.md proofread.
parents
e5023cbf
970d2a9b
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
34 additions
and
46 deletions
+34
-46
intro-upgrade-from-v1.md
docs/guide-zh-CN/intro-upgrade-from-v1.md
+34
-46
No files found.
docs/guide-zh-CN/intro-upgrade-from-v1.md
View file @
edc292bd
从 Yii 1.1 升级
===============
2.
0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当
多差
异。因此从 1.1 版升级并不像小版本间的跨越那么简单,在本指南中你将会了解两个版本间主要的不同之处。
2.
0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,通过本指南你将会了解两个版本间主要的不同之处。
如果你之前没有用过 Yi
i 1.1
, 可以直接跳过本章,直接从"
[
入门篇
](
start-installation.md
)
"开始读起。
如果你之前没有用过 Yi
i 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-configurat
ions.md
)
章节找到。
更多有关
配置的细节可以在
[
配置
](
concept-configura
tions.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 撠楝敺憭扯辣/敶楝敺 URLii 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/basi
c']`
,那么
`/web/views/site/index.php`
视图的主题修饰版就会是
`/web/theme
s/basic/site/index.php`
。也因此让主题现在可以应用在任何视图文件之上,甚至是渲染控制器或小部件上下文环境之外的视图文件。
2.
0 主题的运作方式跟以往完全不同了。它们现在基于
**路径映射机制**
,该机制会把一个源视图文件的路径映射到一个主题视图文件路径。举例来说,如果路径映射为
`['/web/views' => '/web/themes/basi
c']`
,那么
`/web/views/site/index.php`
视图经过主题修饰的版本就会是
`/web/them
es/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 <route>`
,其中
`<route>`
代表控制器的路由(如
`sitemap/index`
)。额外的匿名参数传递到对应的控制器操作,而有名的参数根据
[
[yii\console\Controller::options()
]
] 的声明来解析。
运行控制台命令使用
`yii <route>`
,其中
`<route>`
代表控制器的路由(如
`sitemap/index`
)。额外的匿名参数传递到对应的控制器操作方法,而有名的参数根据
[
[yii\console\Controller::options()
]
] 的声明来解析。
Yii 2.0 支持基于
代
码注释自动生成相关命令的帮助(help)信息。
Yii 2.0 支持基于
代
码注释自动生成相的关命令行帮助(help)信息。
更多细节请参阅
[
控制台命令
](
tutorial-console.md
)
章节。
...
...
@@ -238,7 +228,7 @@ Yii 2.0 鈭誨釣隞斤葬嚗elp嚗縑
国际化(I18N)
----
Yii 2.0 移除了原来内置的日期格式器和数字格式器,为了支持
[
PECL intl PHP module
](
http://pecl.php.net
/packag
e/intl
)
(PHP 的国际化扩展)模块的使用。
Yii 2.0 移除了原来内置的日期格式器和数字格式器,为了支持
[
PECL intl PHP module
](
http://pecl.php.net
/pack
age/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 引进
了
*表单栏(f
ield)*
的概念,用来创建一个基于
[
[yii\widgets\ActiveForm
]
]的表单。一个表单栏是一个由标签、输入框、错误消息(可能还有提示文字)组成的容器,被表示为
[
[yii\widgets\ActiveField|ActiveField
]
] 对象。使用表单栏建立表单的过程比以前更整洁利落:
Yii 2.0 引进
了
**表单栏(fi
eld)**
的概念,用来创建一个基于
[
[yii\widgets\ActiveForm
]
]的表单。一个表单栏是一个由标签、输入框、错误消息(可能还有提示文字)组成的容器,被表示为
[
[yii\widgets\ActiveField|ActiveField
]
] 对象。使用表单栏建立表单的过程比以前更整洁利落:
```
php
<?php
$form
=
yii\widgets\ActiveForm
::
begin
();
?>
...
...
@@ -311,8 +301,7 @@ Yii 2.0 撘*銵典ield嚗*艙嚗遣銝銝芸鈭 [[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
)
章节。
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment