mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 14:46:19 +08:00 
			
		
		
		
	@ -260,7 +260,7 @@ $array = [
 | 
				
			|||||||
    ['id' => '123', 'name' => 'aaa', 'class' => 'x'],
 | 
					    ['id' => '123', 'name' => 'aaa', 'class' => 'x'],
 | 
				
			||||||
    ['id' => '124', 'name' => 'bbb', 'class' => 'x'],
 | 
					    ['id' => '124', 'name' => 'bbb', 'class' => 'x'],
 | 
				
			||||||
    ['id' => '345', 'name' => 'ccc', 'class' => 'y'],
 | 
					    ['id' => '345', 'name' => 'ccc', 'class' => 'y'],
 | 
				
			||||||
);
 | 
					];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
$result = ArrayHelper::map($array, 'id', 'name');
 | 
					$result = ArrayHelper::map($array, 'id', 'name');
 | 
				
			||||||
// 结果是: 
 | 
					// 结果是: 
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,7 @@ RESTful 的 API 都是关于访问和操作 *资源*,可将资源看成MVC模
 | 
				
			|||||||
当 RESTful API 响应中包含一个资源时,该资源需要序列化成一个字符串。
 | 
					当 RESTful API 响应中包含一个资源时,该资源需要序列化成一个字符串。
 | 
				
			||||||
Yii将这个过程分成两步,首先,资源会被 [[yii\rest\Serializer]] 转换成数组,
 | 
					Yii将这个过程分成两步,首先,资源会被 [[yii\rest\Serializer]] 转换成数组,
 | 
				
			||||||
然后,该数组会通过 [[yii\web\ResponseFormatterInterface|response formatters]]
 | 
					然后,该数组会通过 [[yii\web\ResponseFormatterInterface|response formatters]]
 | 
				
			||||||
根据请求格式(如JSON, XML)被序列化成字符串。
 | 
					根据请求格式(如 JSON,XML)被序列化成字符串。
 | 
				
			||||||
当开发一个资源类时应重点关注第一步。
 | 
					当开发一个资源类时应重点关注第一步。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
通过覆盖 [[yii\base\Model::fields()|fields()]] 和/或
 | 
					通过覆盖 [[yii\base\Model::fields()|fields()]] 和/或
 | 
				
			||||||
@ -44,7 +44,7 @@ http://localhost/users?fields=id,email
 | 
				
			|||||||
// 返回 fields() 方法申明的所有字段,以及 extraFields() 方法中的 profile 字段
 | 
					// 返回 fields() 方法申明的所有字段,以及 extraFields() 方法中的 profile 字段
 | 
				
			||||||
http://localhost/users?expand=profile
 | 
					http://localhost/users?expand=profile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 返回回fields()和extraFields()方法中提供的id, email 和 profile字段
 | 
					// 返回 fields() 方法中的 id, email,以及 extraFields() 方法中的 profile 字段
 | 
				
			||||||
http://localhost/users?fields=id,email&expand=profile
 | 
					http://localhost/users?fields=id,email&expand=profile
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -92,8 +92,8 @@ public function fields()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
> Warning: 模型的所有属性默认会被包含到API结果中,
 | 
					> Warning: 模型的所有属性默认会被包含到API结果中,
 | 
				
			||||||
> 应检查数据确保没包含敏感数据,如果有敏感数据,
 | 
					> 应检查数据确保没包含敏感数据,如果有敏感数据,
 | 
				
			||||||
> 应覆盖`fields()`过滤掉,在上述例子中,我们选择过滤掉 `auth_key`, 
 | 
					> 应覆盖 `fields()` 过滤掉,在上述例子中,我们选择过滤掉 `auth_key`,
 | 
				
			||||||
> `password_hash` 和 `password_reset_token`.
 | 
					> `password_hash` 和 `password_reset_token`。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### 覆盖 `extraFields()` 方法 <span id="overriding-extra-fields"></span>
 | 
					### 覆盖 `extraFields()` 方法 <span id="overriding-extra-fields"></span>
 | 
				
			||||||
@ -117,7 +117,7 @@ public function extraFields()
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`http://localhost/users?fields=id,email&expand=profile` 的请求可能返回如下JSON 数据:
 | 
					`http://localhost/users?fields=id,email&expand=profile` 的请求可能返回如下 JSON 数据:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
[
 | 
					[
 | 
				
			||||||
@ -211,10 +211,10 @@ class UserResource extends Model implements Linkable
 | 
				
			|||||||
资源对象可以组成 *集合*,
 | 
					资源对象可以组成 *集合*,
 | 
				
			||||||
每个集合包含一组相同类型的资源对象。
 | 
					每个集合包含一组相同类型的资源对象。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
集合可被展现成数组,更多情况下展现成 [data providers](output-data-providers.md). 
 | 
					集合可被展现成数组,更多情况下展现成 [data providers](output-data-providers.md)。
 | 
				
			||||||
因为 data providers 支持资源的排序和分页,这个特性在 RESTful API 返回集合时也用到,
 | 
					因为 data providers 支持资源的排序和分页,这个特性在 RESTful API 返回集合时也用到,
 | 
				
			||||||
例如 This is because data providers support sorting and pagination
 | 
					例如 This is because data providers support sorting and pagination
 | 
				
			||||||
如下操作返回post资源的data provider:
 | 
					如下操作返回 post 资源的 data provider:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
namespace app\controllers;
 | 
					namespace app\controllers;
 | 
				
			||||||
@ -238,11 +238,11 @@ class PostController extends Controller
 | 
				
			|||||||
[[yii\rest\Serializer]] 会取出资源的当前页并组装成资源对象数组,
 | 
					[[yii\rest\Serializer]] 会取出资源的当前页并组装成资源对象数组,
 | 
				
			||||||
[[yii\rest\Serializer]] 也通过如下 HTTP 头包含页码信息:
 | 
					[[yii\rest\Serializer]] 也通过如下 HTTP 头包含页码信息:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* `X-Pagination-Total-Count`: 资源所有数量;
 | 
					* `X-Pagination-Total-Count`:资源所有数量;
 | 
				
			||||||
* `X-Pagination-Page-Count`: 页数;
 | 
					* `X-Pagination-Page-Count`:页数;
 | 
				
			||||||
* `X-Pagination-Current-Page`: 当前页(从1开始);
 | 
					* `X-Pagination-Current-Page`:当前页(从 1 开始);
 | 
				
			||||||
* `X-Pagination-Per-Page`: 每页资源数量;
 | 
					* `X-Pagination-Per-Page`:每页资源数量;
 | 
				
			||||||
* `Link`: 允许客户端一页一页遍历资源的导航链接集合.
 | 
					* `Link`:允许客户端一页一页遍历资源的导航链接集合。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
可在[快速入门](rest-quick-start.md#trying-it-out) 一节中找到样例.
 | 
					可在[快速入门](rest-quick-start.md#trying-it-out) 一节中找到样例。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -43,15 +43,15 @@ $url = Url::to(['post/view', 'id' => 100]);
 | 
				
			|||||||
- 默认URL格式;
 | 
					- 默认URL格式;
 | 
				
			||||||
- 美化URL格式。
 | 
					- 美化URL格式。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
默认URL格式试用一个参数`r`表示路由,
 | 
					默认URL格式使用一个参数`r`表示路由,
 | 
				
			||||||
并且试用一般的参数格式表示请求参数。例如,`/index.php?r=post/view&id=100`表示路由为`post/view`,参数`id`为100。
 | 
					并且使用一般的参数格式表示请求参数。例如,`/index.php?r=post/view&id=100`表示路由为`post/view`,参数`id`为100。
 | 
				
			||||||
默认URL格式不需要为[[yii\web\UrlManager|URL管理器]]做任何配置,
 | 
					默认URL格式不需要为[[yii\web\UrlManager|URL管理器]]做任何配置,
 | 
				
			||||||
并且在任何Web服务器都可以正常试用。
 | 
					并且在任何Web服务器都可以正常使用。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
美化URL格式在脚本名称后面使用更多的路径信息表示路由和参数信息。
 | 
					美化URL格式在脚本名称后面使用更多的路径信息表示路由和参数信息。
 | 
				
			||||||
例如,用适当的[[yii\web\UrlManager::rules|URL规则]],`/index.php/post/100`中附加的路径信息`/post/100`表示
 | 
					例如,用适当的[[yii\web\UrlManager::rules|URL规则]],`/index.php/post/100`中附加的路径信息`/post/100`表示
 | 
				
			||||||
路由为`post/view`,参数`id`为100。
 | 
					路由为`post/view`,参数`id`为100。
 | 
				
			||||||
要试用美化的URL格式,你需要根据实际的需求
 | 
					要使用美化的URL格式,你需要根据实际的需求
 | 
				
			||||||
设计一组[[yii\web\UrlManager::rules|URL规则]]来规定URL的样式。
 | 
					设计一组[[yii\web\UrlManager::rules|URL规则]]来规定URL的样式。
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
你可以仅设置[[yii\web\UrlManager|URL管理器]]中的[[yii\web\UrlManager::enablePrettyUrl|开启美化URL]]来切换两种URL格式,
 | 
					你可以仅设置[[yii\web\UrlManager|URL管理器]]中的[[yii\web\UrlManager::enablePrettyUrl|开启美化URL]]来切换两种URL格式,
 | 
				
			||||||
@ -69,7 +69,7 @@ $url = Url::to(['post/view', 'id' => 100]);
 | 
				
			|||||||
如果使用默认URL格式,解析请求到路由只是简单的从`GET`请求中得到命名为`r`的参数。
 | 
					如果使用默认URL格式,解析请求到路由只是简单的从`GET`请求中得到命名为`r`的参数。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
当试用美化URL格式时,[[yii\web\UrlManager|URL管理器]]将检查注册的[[yii\web\UrlManager::rules|URL规则]],
 | 
					当使用用美化URL格式时,[[yii\web\UrlManager|URL管理器]]将检查注册的[[yii\web\UrlManager::rules|URL规则]],
 | 
				
			||||||
找到一条可以匹配的将请求转到路由的规则。
 | 
					找到一条可以匹配的将请求转到路由的规则。
 | 
				
			||||||
如果找不到任何匹配的规则,系统将抛出[[yii\web\NotFoundHttpException]]异常。
 | 
					如果找不到任何匹配的规则,系统将抛出[[yii\web\NotFoundHttpException]]异常。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -280,7 +280,7 @@ echo Url::previous();
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
> Note: 如果你想在URL中隐藏入口脚本名称,除了要设置 [[yii\web\UrlManager::showScriptName|showScriptName]] 为 false,
 | 
					> Note: 如果你想在URL中隐藏入口脚本名称,除了要设置 [[yii\web\UrlManager::showScriptName|showScriptName]] 为 false,
 | 
				
			||||||
  同时应该配置 Web 服务,处理当请求 URL 没有特殊指定入口脚本时确定要执行哪个PHP文件,
 | 
					  同时应该配置 Web 服务,处理当请求 URL 没有特殊指定入口脚本时确定要执行哪个PHP文件,
 | 
				
			||||||
  如果你试用 Apache Web server,你可以参考[安装](start-installation.md#recommended-apache-configuration)中推荐的配置。
 | 
					  如果你使用 Apache Web server,你可以参考[安装](start-installation.md#recommended-apache-configuration)中推荐的配置。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -685,7 +685,7 @@ URL规范器可以针对URL管理器全局配置,也可以针对规则单独
 | 
				
			|||||||
在开发复杂的 Web 应用程序时,优化 URL 规则非常重要,以便解析请求和创建 URL 所需
 | 
					在开发复杂的 Web 应用程序时,优化 URL 规则非常重要,以便解析请求和创建 URL 所需
 | 
				
			||||||
的时间更少。
 | 
					的时间更少。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
通过使用参数化路由,您可以减少 URL 规则的数量,这可以显着提高性能。
 | 
					通过使用参数化路由,您可以减少 URL 规则的数量,这可以显著提高性能。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
当解析或创建URL时,[[yii\web\UrlManager|URL manager]] 按照它们声明的顺序检查 URL 规则。
 | 
					当解析或创建URL时,[[yii\web\UrlManager|URL manager]] 按照它们声明的顺序检查 URL 规则。
 | 
				
			||||||
因此,您可以考虑调整 URL 规则的顺序,以便在较少使用的规则之前放置更具体和/或更常用的规则。
 | 
					因此,您可以考虑调整 URL 规则的顺序,以便在较少使用的规则之前放置更具体和/或更常用的规则。
 | 
				
			||||||
 | 
				
			|||||||
@ -13,8 +13,8 @@ use yii\jui\DatePicker;
 | 
				
			|||||||
<?= DatePicker::widget(['name' => 'date']) ?>
 | 
					<?= DatePicker::widget(['name' => 'date']) ?>
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Yii提供许多优秀的小部件,比如[[yii\widgets\ActiveForm|active form]], [[yii\widgets\Menu|menu]],
 | 
					Yii提供许多优秀的小部件,比如 [[yii\widgets\ActiveForm|active form]],[[yii\widgets\Menu|menu]],
 | 
				
			||||||
[jQuery UI widgets](widget-jui.md), 
 | 
					[jQuery UI widgets](widget-jui.md),
 | 
				
			||||||
[Twitter Bootstrap widgets](widget-bootstrap.md)。
 | 
					[Twitter Bootstrap widgets](widget-bootstrap.md)。
 | 
				
			||||||
接下来介绍小部件的基本知识,如果你想了解某个小部件请参考对应的类 API 文档。
 | 
					接下来介绍小部件的基本知识,如果你想了解某个小部件请参考对应的类 API 文档。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -42,7 +42,7 @@ use yii\jui\DatePicker;
 | 
				
			|||||||
一些小部件可在 [[yii\base\Widget::begin()]] 
 | 
					一些小部件可在 [[yii\base\Widget::begin()]] 
 | 
				
			||||||
和 [[yii\base\Widget::end()]] 调用中使用数据内容。
 | 
					和 [[yii\base\Widget::end()]] 调用中使用数据内容。
 | 
				
			||||||
例如如下代码使用 [[yii\widgets\ActiveForm]] 小部件生成一个登录表单,
 | 
					例如如下代码使用 [[yii\widgets\ActiveForm]] 小部件生成一个登录表单,
 | 
				
			||||||
小部件会在`begin()` 和0 `end()`执行处分别生成`<form>`的开始标签和结束标签,
 | 
					小部件会在 `begin()` 和 `end()` 执行处分别生成 `<form>` 的开始标签和结束标签,
 | 
				
			||||||
中间的任何代码也会被渲染。
 | 
					中间的任何代码也会被渲染。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
@ -74,13 +74,13 @@ use yii\helpers\Html;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### 配置全局默认值
 | 
					### 配置全局默认值
 | 
				
			||||||
 | 
					
 | 
				
			||||||
小部件的全局默认值可以通过 DI 容器配置:
 | 
					小部件的全局默认值可以通过 DI 容器配置:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```php
 | 
					```php
 | 
				
			||||||
\Yii::$container->set('yii\widgets\LinkPager', ['maxButtonCount' => 5]);
 | 
					\Yii::$container->set('yii\widgets\LinkPager', ['maxButtonCount' => 5]);
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
详见 [依赖注入容器 "实践中的应用" 一节](concept-di-container.md#practical-usage) 。
 | 
					详见 [依赖注入容器“实践中的应用”一节](concept-di-container.md#practical-usage) 。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 创建小部件 <span id="creating-widgets"></span>
 | 
					## 创建小部件 <span id="creating-widgets"></span>
 | 
				
			||||||
@ -88,7 +88,7 @@ use yii\helpers\Html;
 | 
				
			|||||||
继承 [[yii\base\Widget]] 类并覆盖 [[yii\base\Widget::init()]] 和/或
 | 
					继承 [[yii\base\Widget]] 类并覆盖 [[yii\base\Widget::init()]] 和/或
 | 
				
			||||||
[[yii\base\Widget::run()]] 方法可创建小部件。通常`init()` 方法处理小部件属性,
 | 
					[[yii\base\Widget::run()]] 方法可创建小部件。通常`init()` 方法处理小部件属性,
 | 
				
			||||||
`run()` 方法包含小部件生成渲染结果的代码。
 | 
					`run()` 方法包含小部件生成渲染结果的代码。
 | 
				
			||||||
渲染结果可在`run()`方法中直接"echoed"输出或以字符串返回。
 | 
					渲染结果可以直接“输出”或通过 `run()` 方法作为字符串返回。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
如下代码中 `HelloWidget` 编码并显示赋给 `message` 属性的值,
 | 
					如下代码中 `HelloWidget` 编码并显示赋给 `message` 属性的值,
 | 
				
			||||||
如果属性没有被赋值,默认会显示 "Hello World"。
 | 
					如果属性没有被赋值,默认会显示 "Hello World"。
 | 
				
			||||||
 | 
				
			|||||||
@ -54,7 +54,7 @@ $redis = Yii::$app->redis;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// 判断 key 为 username 的是否有值,有则打印,没有则赋值
 | 
					// 判断 key 为 username 的是否有值,有则打印,没有则赋值
 | 
				
			||||||
$key = 'username';
 | 
					$key = 'username';
 | 
				
			||||||
if ($val = $redis->get($key);) {
 | 
					if ($val = $redis->get($key)) {
 | 
				
			||||||
    var_dump($val);
 | 
					    var_dump($val);
 | 
				
			||||||
} else {
 | 
					} else {
 | 
				
			||||||
    $redis->set($key, 'marko');
 | 
					    $redis->set($key, 'marko');
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user