Browse Source

improve zh-CN docs (#14606) [skip ci]

tags/2.0.13
张迪 7 years ago committed by Alexander Makarov
parent
commit
fc7ea1139c
  1. 18
      docs/guide-zh-CN/db-dao.md
  2. 17
      docs/guide-zh-CN/input-forms.md
  3. 21
      docs/guide-zh-CN/input-validation.md
  4. 25
      docs/guide-zh-CN/rest-rate-limiting.md

18
docs/guide-zh-CN/db-dao.md

@ -49,7 +49,7 @@ return [
请参考 `[[yii\db\Connection]]` 获取可配置的属性列表。
如果你想通过ODBC连接数据库,则需要配置[[yii\db\Connection::driverName]] 属性,例如:
```
```php
'db' => [
'class' => 'yii\db\Connection',
'driverName' => 'mysql',
@ -84,14 +84,14 @@ return [
在代码中通过以下方式使用:
```
```php
$primaryConnection = \Yii::$app->db;
$secondaryConnection = \Yii::$app->secondDb;
```
如果不想定义数据库连接为全局[应用](structure-application-components.md)组件,可以在代码中直接初始化使用:
```
```php
$connection = new \yii\db\Connection([
'dsn' => $dsn,
'username' => $username,
@ -102,7 +102,7 @@ $connection->open();
> 小提示:如果在创建了连接后需要执行额外的 SQL 查询,可以添加以下代码到应用配置文件:
```
```php
return [
// ...
'components' => [
@ -126,28 +126,28 @@ return [
### SELECT 查询
查询返回多行:
```
```php
$command = $connection->createCommand('SELECT * FROM post');
$posts = $command->queryAll();
```
返回单行:
```
```php
$command = $connection->createCommand('SELECT * FROM post WHERE id=1');
$post = $command->queryOne();
```
查询多行单值:
```
```php
$command = $connection->createCommand('SELECT title FROM post');
$titles = $command->queryColumn();
```
查询标量值/计算值:
```
```php
$command = $connection->createCommand('SELECT COUNT(*) FROM post');
$postCount = $command->queryScalar();
```
@ -156,7 +156,7 @@ $postCount = $command->queryScalar();
如果执行 SQL 不返回任何数据可使用命令中的 execute 方法:
```
```php
$command = $connection->createCommand('UPDATE post SET status=1 WHERE id=1');
$command->execute();
```

17
docs/guide-zh-CN/input-forms.md

@ -1,5 +1,6 @@
创建表单
==============
====
基于活动记录(ActiveRecord)的表单:ActiveForm
-----------------------
在yii中使用表单的主要方式是通过[[yii\widgets\ActiveForm]]。当某个表单是基于一个模型时,应该首选这种方式。此外,在[[yii\helpers\Html]]中有很多实用的方法为表单添加按钮和帮助文档。
@ -53,7 +54,8 @@ $form = ActiveForm::begin([
在上面的代码中,[[yii\widgets\ActiveForm::begin()|ActiveForm::begin()]] 不仅创建了一个表单实例,同时也标志的表单的开始。所有在[[yii\widgets\ActiveForm::begin()|ActiveForm::begin()]]与[[yii\widgets\ActiveForm::end()|ActiveForm::end()]]之中的内容都会被HTML中的 `<form>`标签包裹。与其他小部件一样,你可以制定一些选项,通过传递数组到到 `begin` 中来配置小部件。在这种情况下,一个额外的CSS类和ID会在 `<form>` 标签中使用。要查看更多可用的选项,请查看API文档的 [[yii\widgets\ActiveForm]]。
### ActiveField <span id="activefield"></span>.
### ActiveField <span id="activefield"></span>
为了在表单中创建表单元素与元素的标签,以及任意适用的Javascript验证,需要使用[[yii\widgets\ActiveForm::field()]|ActiveForm::field()]方法,其返回一个[[yii\widgets\ActiveField]]实例。当直接输出该方法时,结果是一个普通的(文本)输入。要自定义输出,可以附加上[[yii\widgets\ActiveField|ActiveField]]的其他方法来一起调用:
```php
@ -88,6 +90,7 @@ echo $form->field($model, 'items[]')->checkboxList(['a' => 'Item A', 'b' => 'Ite
> Tip:如果你的应用程序正在使用Twitter的Bootstrap CSS样式,你可以选择使用[[yii\bootstrap\ActiveForm]]代替[[yii\widgets\ActiveForm]],这个表单继承自后者,并且使用Bootstrap特有的样式初始化表单的输入框。
> Tip: 为了使用星号对必填字段进行样式,你可以使用下面的CSS样式:
>
> ```css
> div.required label.control-label:after {
> content: " *";
@ -99,9 +102,10 @@ echo $form->field($model, 'items[]')->checkboxList(['a' => 'Item A', 'b' => 'Ite
-----------------------
这里有3中类型的列表:
* 下拉列表
* 单选列表
* 多选列表
- 下拉列表
- 单选列表
- 多选列表
为了创建列表,你必须先为它准备选项。这些选项可以手动准备如下:
@ -188,6 +192,7 @@ Pjax::begin([
ActiveForm::end();
Pjax::end();
```
> Tip: 注意小心[[yii\widgets\Pjax|Pjax]]内部的链接,因为响应仍可能在组件内部呈现。为了避免这种现象,可以使用`data-pjax="0"`这个HTML属性。
#### 提交按钮和文件上传
@ -205,4 +210,4 @@ Pjax::end();
- [收集列表输入](input-tabular-input.md) 同一种类型的多个模型的采集数据。
- [多模型同时输入](input-multiple-models.md) 在同一窗口中处理多个不同的模型。
- [文件上传](input-file-upload.md) 如何使用表格来上传文件。
- [文件上传](input-file-upload.md) 如何使用表格来上传文件。

21
docs/guide-zh-CN/input-validation.md

@ -161,13 +161,16 @@ return [
如你所见,这些验证规则并不真的对输入数据进行任何验证。而是,对输入数据进行一些处理,然后把它们存回当前被验证的模型特性。
下面的代码示例展示了对用户输入的完整处理,这将确保只将整数值存储在一个属性中:
```php
['age', 'trim'],
['age', 'default', 'value' => null],
['age', 'integer', 'integerOnly' => true, 'min' => 0],
['age', 'filter', 'filter' => 'intval', 'skipOnEmpty' => true],
```
以上代码将对输入执行以下操作:
1. 从输入值中去除前后空白。
2. 确保空输入在数据库中存储为`null`;我们区分 `未设置` 值和实际值为 `0` 之间的区别。如果值不允许为`null`,则可以在此处设置另一个默认值。
3. 如果该值不为空,则验证该值是否为大于0的整数。大多数验证器的 [[yii\validators\Validator::$skipOnEmpty|$skipOnEmpty]] 属性都被设置为`true`。
@ -322,12 +325,13 @@ class MyForm extends Model
```
> Note: 缺省状态下,行内验证器不会在关联特性的输入值为空或该特性已经在其他验证中失败的情况下起效。若你想要确保该验证器始终启用的话,你可以在定义规则时,酌情将 [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] 以及 [[yii\validators\Validator::skipOnError|skipOnError]]
属性设为 false,比如,
> 属性设为 false,比如,
>
> ```php
[
['country', 'validateCountry', 'skipOnEmpty' => false, 'skipOnError' => false],
]
```
> [
> ['country', 'validateCountry', 'skipOnEmpty' => false, 'skipOnError' => false],
> ]
> ```
### 独立验证器(Standalone Validators) <span id="standalone-validators"></span>
@ -465,8 +469,9 @@ JS;
```
> Tip: 上述代码主要是演示了如何支持客户端验证。在具体实践中,你可以使用 [in](tutorial-core-validators.md#in) 核心验证器来达到同样的目的。比如这样的验证规则:
>
> ```php
[
['status', 'in', 'range' => Status::find()->select('id')->asArray()->column()],
]
> [
> ['status', 'in', 'range' => Status::find()->select('id')->asArray()->column()],
> ]
```

25
docs/guide-zh-CN/rest-rate-limiting.md

@ -1,16 +1,17 @@
速率限制
=============
限流 (Rate Limiting)
==================
为防止滥用,你应该考虑增加速率限制到您的 API。
例如,您可以限制每个用户的 API 的使用是在 10 分钟内最多 100 次的 API 调用。
如果一个用户在规定的时间内太多的请求被接收,将返回响应状态代码 429 (这意味着过多的请求)。
为防止滥用,你应该考虑对您的 API 限流。
例如,您可以限制每个用户 10 分钟内最多调用 API 100 次。
如果在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429 (这意味着过多的请求)。
要启用限流, [[yii\web\User::identityClass|user identity class]] 应该实现 [[yii\filters\RateLimitInterface]].
要启用速率限制, [[yii\web\User::identityClass|user identity class]] 应该实现 [[yii\filters\RateLimitInterface]].
这个接口需要实现以下三个方法:
* `getRateLimit()`: 返回允许的请求的最大数及时间,例如,`[100, 600]` 表示在 600 秒内最多 100 次的 API 调用。
* `loadAllowance()`: 返回剩余的允许的请求和最后一次速率限制检查时相应的 UNIX 时间戳数。
* `saveAllowance()`: 保存剩余的允许请求数和当前的 UNIX 时间戳。
- `getRateLimit()`: 返回允许的最大请求数及时间,例如,`[100, 600]` 表示在 600 秒内最多 100 次的 API 调用。
- `loadAllowance()`: 返回剩余的允许的请求和最后一次限流检查时相应的 UNIX 时间戳数。
- `saveAllowance()`: 保存剩余的允许请求数和当前的 UNIX 时间戳。
你可以在 user 表中使用两列来记录容差和时间戳信息。
`loadAllowance()``saveAllowance()` 可以通过实现对符合当前身份验证的用户的这两列值的读和保存。为了提高性能,你也可以
@ -30,9 +31,9 @@ public function behaviors()
当速率限制被激活,默认情况下每个响应将包含以下 HTTP 头发送目前的速率限制信息:
* `X-Rate-Limit-Limit`: 同一个时间段所允许的请求的最大数目;
* `X-Rate-Limit-Remaining`: 在当前时间段内剩余的请求的数量;
* `X-Rate-Limit-Reset`: 为了得到最大请求数所等待的秒数。
- `X-Rate-Limit-Limit`: 同一个时间段所允许的请求的最大数目;
- `X-Rate-Limit-Remaining`: 在当前时间段内剩余的请求的数量;
- `X-Rate-Limit-Reset`: 为了得到最大请求数所等待的秒数。
你可以禁用这些头信息通过配置 [[yii\filters\RateLimiter::enableRateLimitHeaders]] 为 false,
就像在上面的代码示例所示。

Loading…
Cancel
Save