Commit 04009088 by Nobuo Kihara

docs/guide-ja/input-validation.md - WIP [ci skip]

parent 96ce5b9b
...@@ -277,27 +277,26 @@ public function actionSearch($name, $email) ...@@ -277,27 +277,26 @@ public function actionSearch($name, $email)
## バリデータを作成する <a name="creating-validators"></a> ## バリデータを作成する <a name="creating-validators"></a>
Besides using the [core validators](tutorial-core-validators.md) included in the Yii releases, you may also Yii のリリースに含まれている [コアバリデータ](tutorial-core-validators.md) を使う以外に、あなた自身のバリデータを作成することも出来ます。
create your own validators. You may create inline validators or standalone validators. インラインバリデータとスタンドアロンバリデータを作ることが出来ます。
### Inline Validators <a name="inline-validators"></a> ### インラインバリデータ <a name="inline-validators"></a>
An inline validator is one defined in terms of a model method or an anonymous function. The signature of インラインバリデータは、モデルのメソッドまたは無名関数として定義されるバリデータです。
the method/function is: メソッド/関数 のシグニチャは、
```php ```php
/** /**
* @param string $attribute the attribute currently being validated * @param string $attribute 現在検証されている属性
* @param array $params the additional name-value pairs given in the rule * @param array $params 規則に与えられる追加の「名前-値」のペア
*/ */
function ($attribute, $params) function ($attribute, $params)
``` ```
If an attribute fails the validation, the method/function should call [[yii\base\Model::addError()]] to save 属性が健勝に失敗した場合は、メソッド/関数 は [[yii\base\Model::addError()]] を呼んでエラーメッセージをモデルに保存し、後で読み出してエンドユーザに示ことが出来るようにしなければなりません。
the error message in the model so that it can be retrieved back later to present to end users.
Below are some examples: 下記にいくつかの例を示します。
```php ```php
use yii\base\Model; use yii\base\Model;
...@@ -310,13 +309,13 @@ class MyForm extends Model ...@@ -310,13 +309,13 @@ class MyForm extends Model
public function rules() public function rules()
{ {
return [ return [
// an inline validator defined as the model method validateCountry() // モデルメソッド validateCountry() として定義されるインラインバリデータ
['country', 'validateCountry'], ['country', 'validateCountry'],
// an inline validator defined as an anonymous function // 無名関数として定義されるインラインバリデータ
['token', function ($attribute, $params) { ['token', function ($attribute, $params) {
if (!ctype_alnum($this->$attribute)) { if (!ctype_alnum($this->$attribute)) {
$this->addError($attribute, 'The token must contain letters or digits.'); $this->addError($attribute, 'トークンは英数字で構成しなければなりません。');
} }
}], }],
]; ];
...@@ -325,16 +324,15 @@ class MyForm extends Model ...@@ -325,16 +324,15 @@ class MyForm extends Model
public function validateCountry($attribute, $params) public function validateCountry($attribute, $params)
{ {
if (!in_array($this->$attribute, ['USA', 'Web'])) { if (!in_array($this->$attribute, ['USA', 'Web'])) {
$this->addError($attribute, 'The country must be either "USA" or "Web".'); $this->addError($attribute, '国は "USA" または "Web" でなければなりません。');
} }
} }
} }
``` ```
> Note: By default, inline validators will not be applied if their associated attributes receive empty inputs > Note|注意: 既定では、インラインバリデータは、関連付けられている属性が空の入力値を受け取ったり、既に何らかの検証規則に失敗したりしている場合には、適用されません。
or if they have already failed some validation rules. If you want to make sure a rule is always applied, > 規則が常に適用されることを保証したい場合は、規則の宣言において [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] および/または [[yii\validators\Validator::skipOnError|skipOnError]] のプロパティを false に設定することが出来ます。
you may configure the [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] and/or [[yii\validators\Validator::skipOnError|skipOnError]] > 例えば、
properties to be false in the rule declarations. For example:
> >
> ```php > ```php
> [ > [
...@@ -343,12 +341,12 @@ class MyForm extends Model ...@@ -343,12 +341,12 @@ class MyForm extends Model
> ``` > ```
### Standalone Validators <a name="standalone-validators"></a> ### スタンドアロンバリデータ <a name="standalone-validators"></a>
A standalone validator is a class extending [[yii\validators\Validator]] or its child class. You may implement スタンドアロンバリデータは、[[yii\validators\Validator]] またはその子クラスを拡張するクラスです。
its validation logic by overriding the [[yii\validators\Validator::validateAttribute()]] method. If an attribute [[yii\validators\Validator::validateAttribute()]] メソッドをオーバーライドすることによって、その検証ロジックを実装することが出来ます。
fails the validation, call [[yii\base\Model::addError()]] to save the error message in the model, like you do [インラインバリデータ](#inline-validators) でするのと同じように、属性が検証に失敗した場合は、[[yii\base\Model::addError()]] を呼んでエラーメッセージをモデルに保存します。
with [inline validators](#inline-validators). For example, 例えば、
```php ```php
namespace app\components; namespace app\components;
...@@ -360,12 +358,13 @@ class CountryValidator extends Validator ...@@ -360,12 +358,13 @@ class CountryValidator extends Validator
public function validateAttribute($model, $attribute) public function validateAttribute($model, $attribute)
{ {
if (!in_array($model->$attribute, ['USA', 'Web'])) { if (!in_array($model->$attribute, ['USA', 'Web'])) {
$this->addError($model, $attribute, 'The country must be either "USA" or "Web".'); $this->addError($model, $attribute, '国は "USA" または "Web" でなければなりません。');
} }
} }
} }
``` ```
If you want your validator to support validating a value without a model, you should also override If you want your validator to support validating a value without a model, you should also override
[[yii\validators\Validator::validate()]]. You may also override [[yii\validators\Validator::validateValue()]] [[yii\validators\Validator::validate()]]. You may also override [[yii\validators\Validator::validateValue()]]
instead of `validateAttribute()` and `validate()` because by default the latter two methods are implemented instead of `validateAttribute()` and `validate()` because by default the latter two methods are implemented
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment