Browse Source

Merge pull request #100 from xiaoliushifu/doc

input-validation.md【输入验证】的部分翻译
tags/2.0.16
崔亮 6 years ago committed by GitHub
parent
commit
4db7e2ba5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 66
      docs/guide-zh-CN/input-validation.md

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

@ -96,7 +96,7 @@ public function rules()
方法里的激活特性,且它还必须与一或多个声明自
`rules()` 里的激活规则相关联才会被验证。
> Note: It is handy to give names to rules i.e.
> Note: 可以方便地给规则命名比如:
>
> ```php
> public function rules()
@ -108,7 +108,7 @@ public function rules()
> }
> ```
>
> You can use it in a child model:
> 你可以在子模型中使用:
>
> ```php
> public function rules()
@ -394,10 +394,10 @@ class MyForm extends Model
}
```
> Note: Since version 2.0.11 you can use [[yii\validators\InlineValidator::addError()]] for adding errors instead. That way the error
> message can be formatted using [[yii\i18n\I18N::format()]] right away. Use `{attribute}` and `{value}` in the error
> message to refer to an attribute label (no need to get it manually) and attribute value accordingly:
>
> Note: 从 2.0.11 版本开始,你可以用 [[yii\validators\InlineValidator::addError()]] 方法添加错误信息到模型里。用这种方法
> 的话,错误信息可以通过 [[yii\i18n\I18N::format()]] 格式化。 你还可以在错误信息里分别用 `{attribute}``{value}` 来引用
> 属性的名字(不必手动去写)和属性的值:
> ```php
> $validator->addError($this, $attribute, 'The value "{value}" is not acceptable for {attribute}.');
> ```
@ -422,8 +422,8 @@ class MyForm extends Model
操作与 [inline validators](#inline-validators) 所需操作完全一样。比如,
For example the inline validator above could be moved into new [[components/validators/CountryValidator]] class.
In this case we can use [[yii\validators\Validator::addError()]] to set customized message for the model.
比如上述行内验证器也可以转移到新的验证类 [[components/validators/CountryValidator]]。
这种情况下,我们可以用 [[yii\validators\Validator::addError()]] 来给模型设置自定义的错误信息。
```php
namespace app\components;
@ -444,9 +444,9 @@ class CountryValidator extends Validator
若你想要验证器支持不使用 model 的数据验证,你还应该重写[[yii\validators\Validator::validate()]] 方法。
你也可以通过重写[[yii\validators\Validator::validateValue()]] 方法替代
`validateAttribute()``validate()`,因为默认状态下,
后两者的实现使用过调用`validateValue()`实现的。
后两者的实现是通过调用 `validateValue()` 实现的。
Below is an example of how you could use the above validator class within your model.
下面就是一个怎样把自定义验证器在模型中使用的例子。
```php
namespace app\models;
@ -473,19 +473,19 @@ class EntryForm extends Model
```
## Multiple Attributes Validation <span id="multiple-attributes-validation"></span>
## 多属性验证 <span id="multiple-attributes-validation"></span>
Sometimes validators involve multiple attributes. Consider the following form:
某些情况下验证器可以包含多个属性。考虑下面的情况:
```php
class MigrationForm extends \yii\base\Model
{
/**
* Minimal funds amount for one adult person
* 一个成年人的最少花销
*/
const MIN_ADULT_FUNDS = 3000;
/**
* Minimal funds amount for one child
* 一个孩子的最小花销
*/
const MIN_CHILD_FUNDS = 1500;
@ -507,16 +507,16 @@ class MigrationForm extends \yii\base\Model
}
```
### Creating validator <span id="multiple-attributes-validator"></span>
### 创建验证器 <span id="multiple-attributes-validator"></span>
Let's say we need to check if the family income is enough for children. We can create inline validator
`validateChildrenFunds` for that which will run only when `childrenCount` is more than 0.
比如我们需要检查下家庭收入是否足够给孩子们花销。此时我们可以创建一个行内验证器
`validateChildrenFunds` 来解决这个问题,它仅仅在 `childrenCount` 大于 0 的时候才去检查。
Note that we can't use all validated attributes (`['personalSalary', 'spouseSalary', 'childrenCount']`) when attaching
validator. This is because the same validator will run for each attribute (3 times in total) and we only need to run it
once for the whole attribute set.
请注意,我们不要把所有需要验证的属性 (`['personalSalary', 'spouseSalary', 'childrenCount']`) 都附加到
验证器上。因为这样做同一个验证器将会对每个属性都执行一遍验证(总共三次),但是实际上我们只需要对整个属性集
执行一次验证而已。
You can use any of these attributes instead (or use what you think is the most relevant):
你可以使用属性集合里的任何一个(或者使用你认为最相关的那个属性):
```php
['childrenCount', 'validateChildrenFunds', 'when' => function ($model) {
@ -524,7 +524,7 @@ You can use any of these attributes instead (or use what you think is the most r
}],
```
Implementation of `validateChildrenFunds` can be like this:
`validateChildrenFunds` 的实现可以是下面这样的:
```php
public function validateChildrenFunds($attribute, $params)
@ -539,21 +539,21 @@ public function validateChildrenFunds($attribute, $params)
}
```
You can ignore `$attribute` parameter because validation is not related to just one attribute.
你可以忽略 `$attribute` 参数,因为这个验证过程不仅仅关联一个属性。
### Adding errors <span id="multiple-attributes-errors"></span>
### 添加错误信息 <span id="multiple-attributes-errors"></span>
Adding error in case of multiple attributes can vary depending on desired form design:
在添加错误信息的时候,如果是多个属性,可以根据自己想要的格式使用多种情况:
- Select the most relevant field in your opinion and add error to it's attribute:
- 选择一个你认为最相关的字段把错误信息添加到它的属性里:
```php
$this->addError('childrenCount', 'Your salary is not enough for children.');
```
- Select multiple important relevant attributes or all attributes and add the same error message to them. We can store
message in separate variable before passing it to `addError` to keep code DRY.
- 选择多个相关的属性乃至所有属性给它们添加同样的错误信息。在使用 `addError` 之前我们可以先把错误信息存储到
一个独立的变量里,这样可以减少代码重复性。
```php
$message = 'Your salary is not enough for children.';
@ -562,7 +562,7 @@ $this->addError('wifeSalary', $message);
$this->addError('childrenCount', $message);
```
Or use a loop:
或者使用循环:
```php
$attributes = ['personalSalary', 'wifeSalary', 'childrenCount'];
@ -571,20 +571,20 @@ foreach ($attributes as $attribute) {
}
```
- Add a common error (not related to particular attribute). We can use the not existing attribute name for adding
error, for example `*`, because attribute existence is not checked at that point.
- 添加通用错误信息(不相关于特定的属性)。我们可以用一个不存在的属性名添加错误信息
比如 `*`,因为这时是不检查属性的存在性的。
```php
$this->addError('*', 'Your salary is not enough for children.');
```
As a result, we will not see error message near form fields. To display it, we can include the error summary in view:
这种情况下,我们不会在表单域里看到错误信息。为了展示这个错误信息,我们可以在视图里使用错误汇总:
```php
<?= $form->errorSummary($model) ?>
```
> Note: Creating validator which validates multiple attributes at once is well described in the [community cookbook](https://github.com/samdark/yii2-cookbook/blob/master/book/forms-validator-multiple-attributes.md).
> Note: 创建一次验证多个属性的验证器的参考说明在这里 [community cookbook](https://github.com/samdark/yii2-cookbook/blob/master/book/forms-validator-multiple-attributes.md).
## Client-Side Validation <span id="client-side-validation"></span>

Loading…
Cancel
Save