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
2e664764
Commit
2e664764
authored
Dec 18, 2014
by
Alexander Makarov
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #6563 from softark/docs-guide-ja-update
docs/guide-ja update [ci skip]
parents
33101c05
dce067ed
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
81 additions
and
81 deletions
+81
-81
README.md
docs/guide-ja/README.md
+9
-9
input-validation.md
docs/guide-ja/input-validation.md
+72
-72
No files found.
docs/guide-ja/README.md
View file @
2e664764
...
@@ -60,15 +60,15 @@ All Rights Reserved.
...
@@ -60,15 +60,15 @@ All Rights Reserved.
鍵となる概念
鍵となる概念
------------
------------
*
**翻訳中**
[
コンポーネント
](
concept-components.md
)
*
[
コンポーネント
](
concept-components.md
)
*
**翻訳中**
[
プロパティ
](
concept-properties.md
)
*
[
プロパティ
](
concept-properties.md
)
*
**翻訳中**
[
イベント
](
concept-events.md
)
*
[
イベント
](
concept-events.md
)
*
**翻訳中**
[
ビヘイビア
](
concept-behaviors.md
)
*
[
ビヘイビア
](
concept-behaviors.md
)
*
**翻訳中**
[
構成情報
](
concept-configurations.md
)
*
[
構成情報
](
concept-configurations.md
)
*
**翻訳中**
[
エイリアス
](
concept-aliases.md
)
*
[
エイリアス
](
concept-aliases.md
)
*
**翻訳中**
[
クラスのオートロード
](
concept-autoloading.md
)
*
[
クラスのオートロード
](
concept-autoloading.md
)
*
**翻訳中**
[
サービスロケータ
](
concept-service-locator.md
)
*
[
サービスロケータ
](
concept-service-locator.md
)
*
**翻訳中**
[
依存注入コンテナ
](
concept-di-container.md
)
*
[
依存注入コンテナ
](
concept-di-container.md
)
データベースの取り扱い
データベースの取り扱い
...
...
docs/guide-ja/input-validation.md
View file @
2e664764
...
@@ -4,8 +4,8 @@
...
@@ -4,8 +4,8 @@
大まかに言うなら、エンドユーザから受信したデータは決して信用せず、利用する前に検証しなければならない、ということです。
大まかに言うなら、エンドユーザから受信したデータは決して信用せず、利用する前に検証しなければならない、ということです。
[
モデル
](
structure-models.md
)
にユーザの入力が投入されたら、モデルの
[
[yii\base\Model::validate()
]
] メソッドを呼んで入力を検証することが出来ます。
[
モデル
](
structure-models.md
)
にユーザの入力が投入されたら、モデルの
[
[yii\base\Model::validate()
]
] メソッドを呼んで入力を検証することが出来ます。
このメソッドは
検証
が成功したか否かを示す真偽値を返します。
このメソッドは
バリデーション
が成功したか否かを示す真偽値を返します。
検証
が失敗した場合は、
[
[yii\base\Model::errors
]
] プロパティからエラーメッセージを取得することが出来ます。
バリデーション
が失敗した場合は、
[
[yii\base\Model::errors
]
] プロパティからエラーメッセージを取得することが出来ます。
例えば、
例えば、
```
php
```
php
...
@@ -17,16 +17,16 @@ $model->attributes = \Yii::$app->request->post('ContactForm');
...
@@ -17,16 +17,16 @@ $model->attributes = \Yii::$app->request->post('ContactForm');
if
(
$model
->
validate
())
{
if
(
$model
->
validate
())
{
// 全ての入力が有効
// 全ての入力が有効
}
else
{
}
else
{
//
検証
が失敗。$errors はエラーメッセージを含む配列
//
バリデーション
が失敗。$errors はエラーメッセージを含む配列
$errors
=
$model
->
errors
;
$errors
=
$model
->
errors
;
}
}
```
```
## 規則を宣言する <a name="declaring-rules"></a>
## 規則を宣言する <a name="declaring-rules"></a>
`validate()`
を現実に動作させるためには、検証する予定の属性に対して
検証
規則を宣言しなければなりません。
`validate()`
を現実に動作させるためには、検証する予定の属性に対して
バリデーション
規則を宣言しなければなりません。
規則は
[
[yii\base\Model::rules()
]
] メソッドをオーバーライドすることで宣言します。
規則は
[
[yii\base\Model::rules()
]
] メソッドをオーバーライドすることで宣言します。
次の例は、
`ContactForm`
モデルに対して
検証
規則を宣言する方法を示すものです。
次の例は、
`ContactForm`
モデルに対して
バリデーション
規則を宣言する方法を示すものです。
```
php
```
php
public
function
rules
()
public
function
rules
()
...
@@ -50,7 +50,7 @@ public function rules()
...
@@ -50,7 +50,7 @@ public function rules()
[
'属性1'
,
'属性2'
,
...
],
[
'属性1'
,
'属性2'
,
...
],
// 必須。この規則のタイプを指定する。
// 必須。この規則のタイプを指定する。
// クラス名、バリデータのエイリアス、または、
検証
メソッドの名前。
// クラス名、バリデータのエイリアス、または、
バリデーション
メソッドの名前。
'バリデータ'
,
'バリデータ'
,
// オプション。この規則が適用されるべき一つまたは複数のシナリオを指定する。
// オプション。この規則が適用されるべき一つまたは複数のシナリオを指定する。
...
@@ -69,7 +69,7 @@ public function rules()
...
@@ -69,7 +69,7 @@ public function rules()
*
コアバリデータのエイリアス。例えば、
`required`
、
`in`
、
`date`
、等々。
*
コアバリデータのエイリアス。例えば、
`required`
、
`in`
、
`date`
、等々。
コアバリデータの完全なリストは
[
コアバリデータ
](
tutorial-core-validators.md
)
を参照してください。
コアバリデータの完全なリストは
[
コアバリデータ
](
tutorial-core-validators.md
)
を参照してください。
*
モデルクラス内の
検証
メソッドの名前、または無名関数。詳細は、
[
インラインバリデータ
](
#inline-validators
)
の項を参照してください。
*
モデルクラス内の
バリデーション
メソッドの名前、または無名関数。詳細は、
[
インラインバリデータ
](
#inline-validators
)
の項を参照してください。
*
完全修飾のバリデータクラス名。詳細は
[
スタンドアロンバリデータ
](
#standalone-validators
)
の項を参照してください。
*
完全修飾のバリデータクラス名。詳細は
[
スタンドアロンバリデータ
](
#standalone-validators
)
の項を参照してください。
一つの規則は、一つまたは複数の属性を検証するために使用することが出来ます。
一つの規則は、一つまたは複数の属性を検証するために使用することが出来ます。
...
@@ -77,21 +77,21 @@ public function rules()
...
@@ -77,21 +77,21 @@ public function rules()
`on`
オプションを指定することで、規則を特定の
[
シナリオ
](
structure-models.md#scenarios
)
においてのみ適用することが出来ます。
`on`
オプションを指定することで、規則を特定の
[
シナリオ
](
structure-models.md#scenarios
)
においてのみ適用することが出来ます。
`on`
オプションを指定しない場合は、規則が全てのシナリオに適用されることになります。
`on`
オプションを指定しない場合は、規則が全てのシナリオに適用されることになります。
`validate()`
メソッドが呼ばれると、次のステップを踏んで
検証
が実行されます。
`validate()`
メソッドが呼ばれると、次のステップを踏んで
バリデーション
が実行されます。
1.
現在の
[
[yii\base\Model::scenario|シナリオ
]
] を使って
[
[yii\base\Model::scenarios()
]
] から属性のリストを取得し、どの属性が検証されるべきかを決定します。
1.
現在の
[
[yii\base\Model::scenario|シナリオ
]
] を使って
[
[yii\base\Model::scenarios()
]
] から属性のリストを取得し、どの属性が検証されるべきかを決定します。
検証されるべき属性が
*アクティブな属性*
と呼ばれます。
検証されるべき属性が
*アクティブな属性*
と呼ばれます。
2.
現在の
[
[yii\base\Model::scenario|シナリオ
]
] を使って
[
[yii\base\Model::rules()
]
] から規則のリストを取得し、どの
検証
規則が使用されるべきかを決定します。
2.
現在の
[
[yii\base\Model::scenario|シナリオ
]
] を使って
[
[yii\base\Model::rules()
]
] から規則のリストを取得し、どの
バリデーション
規則が使用されるべきかを決定します。
使用されるべき規則が
*アクティブな規則*
と呼ばれます。
使用されるべき規則が
*アクティブな規則*
と呼ばれます。
3.
全てのアクティブな規則を一つずつ使って、その規則に関連付けられた全てのアクティブな属性を一つずつ検証します。
3.
全てのアクティブな規則を一つずつ使って、その規則に関連付けられた全てのアクティブな属性を一つずつ検証します。
検証
規則はリストに挙げられている順に評価されます。
バリデーション
規則はリストに挙げられている順に評価されます。
属性は、上記の
検証
ステップに従って、
`scenarios()`
でアクティブな属性であると宣言されており、かつ、
`rules()`
で宣言された一つまたは複数のアクティブな規則と関連付けられている場合に、また、その場合に限って、検証されます。
属性は、上記の
バリデーションの
ステップに従って、
`scenarios()`
でアクティブな属性であると宣言されており、かつ、
`rules()`
で宣言された一つまたは複数のアクティブな規則と関連付けられている場合に、また、その場合に限って、検証されます。
### エラーメッセージをカスタマイズする <a name="customizing-error-messages"></a>
### エラーメッセージをカスタマイズする <a name="customizing-error-messages"></a>
たいていのバリデータはデフォルトのエラーメッセージを持っていて、属性の
検証が失敗した場合にそれを検証対象の
モデルに追加します。
たいていのバリデータはデフォルトのエラーメッセージを持っていて、属性の
バリデーションが失敗した場合にそれを検証の対象である
モデルに追加します。
例えば、
[
[yii\validators\RequiredValidator|required
]
] バリデータは、このバリデータを使って
`username`
属性を検証したとき、規則に合致しない場合は「ユーザ名は空ではいけません。」というエラーメッセージをモデルに追加します。
例えば、
[
[yii\validators\RequiredValidator|required
]
] バリデータは、このバリデータを使って
`username`
属性を検証したとき、規則に合致しない場合は「ユーザ名は空ではいけません。」というエラーメッセージをモデルに追加します。
規則のエラーメッセージは、次に示すように、規則を宣言するときに
`message`
プロパティを指定することによってカスタマイズすることが出来ます。
規則のエラーメッセージは、次に示すように、規則を宣言するときに
`message`
プロパティを指定することによってカスタマイズすることが出来ます。
...
@@ -105,25 +105,25 @@ public function rules()
...
@@ -105,25 +105,25 @@ public function rules()
}
}
```
```
バリデータの中には、
検証
を失敗させたさまざまな原因をより詳しく説明するための追加のエラーメッセージをサポートしているものがあります。
バリデータの中には、
バリデーション
を失敗させたさまざまな原因をより詳しく説明するための追加のエラーメッセージをサポートしているものがあります。
例えば、
[
[yii\validators\NumberValidator|number
]
] バリデータは、検証される値が大きすぎたり小さすぎたりしたときに
検証
の失敗を説明するために、それぞれ、
[
[yii\validators\NumberValidator::tooBig|tooBig
]
] および
[
[yii\validators\NumberValidator::tooSmall|tooSmall
]
] のメッセージをサポートしています。
例えば、
[
[yii\validators\NumberValidator|number
]
] バリデータは、検証される値が大きすぎたり小さすぎたりしたときに
バリデーション
の失敗を説明するために、それぞれ、
[
[yii\validators\NumberValidator::tooBig|tooBig
]
] および
[
[yii\validators\NumberValidator::tooSmall|tooSmall
]
] のメッセージをサポートしています。
これらのエラーメッセージも、バリデータの他のプロパティと同様、
検証
規則の中で構成することが出来ます。
これらのエラーメッセージも、バリデータの他のプロパティと同様、
バリデーション
規則の中で構成することが出来ます。
###
検証
のイベント <a name="validation-events"></a>
###
バリデーション
のイベント <a name="validation-events"></a>
[
[yii\base\Model::validate()
]
] は、呼び出されると、
検証
プロセスをカスタマイズするためにオーバーライドできる二つのメソッドを呼び出します。
[
[yii\base\Model::validate()
]
] は、呼び出されると、
バリデーション
プロセスをカスタマイズするためにオーバーライドできる二つのメソッドを呼び出します。
*
[
[yii\base\Model::beforeValidate()
]
]: 既定の実装は
[
[yii\base\Model::EVENT_BEFORE_VALIDATE
]
] イベントをトリガするものです。
*
[
[yii\base\Model::beforeValidate()
]
]: 既定の実装は
[
[yii\base\Model::EVENT_BEFORE_VALIDATE
]
] イベントをトリガするものです。
このメソッドをオーバーライドするか、または、イベントに反応して、
検証
が実行される前に、何らかの前処理 (例えば入力されたデータの正規化) をすることが出来ます。
このメソッドをオーバーライドするか、または、イベントに反応して、
バリデーション
が実行される前に、何らかの前処理 (例えば入力されたデータの正規化) をすることが出来ます。
このメソッドは、
検証
を続行すべきか否かを示す真偽値を返さなくてはなりません。
このメソッドは、
バリデーション
を続行すべきか否かを示す真偽値を返さなくてはなりません。
*
[
[yii\base\Model::afterValidate()
]
]: 既定の実装は
[
[yii\base\Model::EVENT_AFTER_VALIDATE
]
] イベントをトリガするものです。
*
[
[yii\base\Model::afterValidate()
]
]: 既定の実装は
[
[yii\base\Model::EVENT_AFTER_VALIDATE
]
] イベントをトリガするものです。
このメソッドをオーバーライドするか、または、イベントに反応して、
検証
が完了した後に、何らかの後処理をすることが出来ます。
このメソッドをオーバーライドするか、または、イベントに反応して、
バリデーション
が完了した後に、何らかの後処理をすることが出来ます。
### 条件付き
の検証
<a name="conditional-validation"></a>
### 条件付き
バリデーション
<a name="conditional-validation"></a>
特定の条件が満たされる場合に限って属性を検証したい場合、例えば、ある属性の
検証
が他の属性の値に依存する場合には、
[
[yii\validators\Validator::when|when
]
] プロパティを使って、そのような条件を定義することが出来ます。
特定の条件が満たされる場合に限って属性を検証したい場合、例えば、ある属性の
バリデーション
が他の属性の値に依存する場合には、
[
[yii\validators\Validator::when|when
]
] プロパティを使って、そのような条件を定義することが出来ます。
例えば、
例えば、
```
php
```
php
...
@@ -145,7 +145,7 @@ public function rules()
...
@@ -145,7 +145,7 @@ public function rules()
function
(
$model
,
$attribute
)
function
(
$model
,
$attribute
)
```
```
クライアント側でも条件付き
の検証
をサポートする必要がある場合は、
[
[yii\validators\Validator::whenClient|whenClient
]
] プロパティを構成しなければなりません。
クライアント側でも条件付き
バリデーション
をサポートする必要がある場合は、
[
[yii\validators\Validator::whenClient|whenClient
]
] プロパティを構成しなければなりません。
このプロパティは、規則を適用すべきか否かを返す JavaScript 関数を表す文字列を値として取ります。
このプロパティは、規則を適用すべきか否かを返す JavaScript 関数を表す文字列を値として取ります。
例えば、
例えば、
...
@@ -164,7 +164,7 @@ function ($model, $attribute)
...
@@ -164,7 +164,7 @@ function ($model, $attribute)
ユーザ入力をフィルタまたは前処理する必要があることがよくあります。
ユーザ入力をフィルタまたは前処理する必要があることがよくあります。
例えば、
`username`
の入力値の前後にある空白を除去したいというような場合です。
例えば、
`username`
の入力値の前後にある空白を除去したいというような場合です。
この目的を達するために
検証
規則を使うことが出来ます。
この目的を達するために
バリデーション
規則を使うことが出来ます。
次の例では、入力値の前後にある空白を除去して、空の入力値を null に変換することを、
[
trim
](
tutorial-core-validators.md#trim
)
および
[
default
](
tutorial-core-validators.md#default
)
のコアバリデータで行っています。
次の例では、入力値の前後にある空白を除去して、空の入力値を null に変換することを、
[
trim
](
tutorial-core-validators.md#trim
)
および
[
default
](
tutorial-core-validators.md#default
)
のコアバリデータで行っています。
...
@@ -176,7 +176,7 @@ function ($model, $attribute)
...
@@ -176,7 +176,7 @@ function ($model, $attribute)
```
```
もっと汎用的な
[
filter
](
tutorial-core-validators.md#filter
)
バリデータを使って、もっと複雑なデータフィルタリングをすることも出来ます。
もっと汎用的な
[
filter
](
tutorial-core-validators.md#filter
)
バリデータを使って、もっと複雑なデータフィルタリングをすることも出来ます。
お
判りのように、これらの検証
規則は実際には入力を検証しません。そうではなくて、検証される属性の値を処理して書き戻すのです。
お
分かりかと思いますが、これらのバリデーション
規則は実際には入力を検証しません。そうではなくて、検証される属性の値を処理して書き戻すのです。
### 空の入力値を扱う <a name="handling-empty-inputs"></a>
### 空の入力値を扱う <a name="handling-empty-inputs"></a>
...
@@ -208,15 +208,15 @@ HTML フォームから入力データが送信されたとき、入力値が空
...
@@ -208,15 +208,15 @@ HTML フォームから入力データが送信されたとき、入力値が空
```
```
> Note|注意: たいていのバリデータは、[[yii\base\Validator::skipOnEmpty]] プロパティがデフォルト値 `true` を取っている場合は、空の入力値を処理しません。
> Note|注意: たいていのバリデータは、[[yii\base\Validator::skipOnEmpty]] プロパティがデフォルト値 `true` を取っている場合は、空の入力値を処理しません。
そのようなバリデータは、関連付けられた属性が空の入力値を受け取ったときは、
検証
の過程ではスキップされるだけになります。
そのようなバリデータは、関連付けられた属性が空の入力値を受け取ったときは、
バリデーション
の過程ではスキップされるだけになります。
[
コアバリデータ
](
tutorial-core-validators.md
)
の中では、
`captcha`
、
`default`
、
`filter`
、
`required`
、そして
`trim`
だけが空の入力値を処理します。
[
コアバリデータ
](
tutorial-core-validators.md
)
の中では、
`captcha`
、
`default`
、
`filter`
、
`required`
、そして
`trim`
だけが空の入力値を処理します。
##
臨時の検証
<a name="ad-hoc-validation"></a>
##
アドホックなバリデーション
<a name="ad-hoc-validation"></a>
時として、何らかのモデルに結び付けられていない値に対する
*
臨時の検証
*
を実行しなければならない場合があります。
時として、何らかのモデルに結び付けられていない値に対する
*
アドホックなバリデーション
*
を実行しなければならない場合があります。
実行する必要がある
検証
が一種類 (例えば、メールアドレスの検証) だけである場合は、使いたいバリデータの
[
[yii\validators\Validator::validate()|validate()
]
] メソッドを次のように呼び出すことが出来ます。
実行する必要がある
バリデーション
が一種類 (例えば、メールアドレスの検証) だけである場合は、使いたいバリデータの
[
[yii\validators\Validator::validate()|validate()
]
] メソッドを次のように呼び出すことが出来ます。
```
php
```
php
$email
=
'test@example.com'
;
$email
=
'test@example.com'
;
...
@@ -229,10 +229,10 @@ if ($validator->validate($email, $error)) {
...
@@ -229,10 +229,10 @@ if ($validator->validate($email, $error)) {
}
}
```
```
> Note|注意: 全てのバリデータがこの種の
検証
をサポートしている訳ではありません。
> Note|注意: 全てのバリデータがこの種の
バリデーション
をサポートしている訳ではありません。
その一例が
[
unique
](
tutorial-core-validators.md#unique
)
コアバリデータであり、これはモデルとともに使用されることだけを念頭にして設計されています。
その一例が
[
unique
](
tutorial-core-validators.md#unique
)
コアバリデータであり、これはモデルとともに使用されることだけを念頭にして設計されています。
いくつかの値に対して複数の
検証
を実行する必要がある場合は、属性と規則の両方をその場で宣言することが出来る
[
[yii\base\DynamicModel
]
] を使うことが出来ます。
いくつかの値に対して複数の
バリデーション
を実行する必要がある場合は、属性と規則の両方をその場で宣言することが出来る
[
[yii\base\DynamicModel
]
] を使うことが出来ます。
これは、次のような使い方をします。
これは、次のような使い方をします。
```
php
```
php
...
@@ -244,16 +244,16 @@ public function actionSearch($name, $email)
...
@@ -244,16 +244,16 @@ public function actionSearch($name, $email)
]);
]);
if
(
$model
->
hasErrors
())
{
if
(
$model
->
hasErrors
())
{
//
検証
が失敗
//
バリデーション
が失敗
}
else
{
}
else
{
//
検証
が成功
//
バリデーション
が成功
}
}
}
}
```
```
[
[yii\base\DynamicModel::validateData()
]
] メソッドは
`DynamicModel`
のインスタンスを作成し、与えられた値 (この例では
`name`
と
`email`
) を使って属性を定義し、そして、与えられた規則で
[
[yii\base\Model::validate()
]
] を呼び出します。
[
[yii\base\DynamicModel::validateData()
]
] メソッドは
`DynamicModel`
のインスタンスを作成し、与えられた値 (この例では
`name`
と
`email`
) を使って属性を定義し、そして、与えられた規則で
[
[yii\base\Model::validate()
]
] を呼び出します。
別の選択肢として、次のように、もっと「クラシック」な構文を使って、
臨時のデータ検証
を実行することも出来ます。
別の選択肢として、次のように、もっと「クラシック」な構文を使って、
アドホックなデータバリデーション
を実行することも出来ます。
```
php
```
php
public
function
actionSearch
(
$name
,
$email
)
public
function
actionSearch
(
$name
,
$email
)
...
@@ -264,14 +264,14 @@ public function actionSearch($name, $email)
...
@@ -264,14 +264,14 @@ public function actionSearch($name, $email)
->
validate
();
->
validate
();
if
(
$model
->
hasErrors
())
{
if
(
$model
->
hasErrors
())
{
//
検証
が失敗
//
バリデーション
が失敗
}
else
{
}
else
{
//
検証
が成功
//
バリデーション
が成功
}
}
}
}
```
```
検証を実行した後は、通常のモデルで行うのと同様に、
検証が成功したか否かを
[
[yii\base\DynamicModel::hasErrors()|hasErrors()
]
] メソッドを呼んでチェックして、
[
[yii\base\DynamicModel::errors|errors
]
] プロパティから検証
エラーを取得することが出来ます。
検証を実行した後は、通常のモデルで行うのと同様に、
バリデーションが成功したか否かを
[
[yii\base\DynamicModel::hasErrors()|hasErrors()
]
] メソッドを呼んでチェックして、
[
[yii\base\DynamicModel::errors|errors
]
] プロパティからバリデーション
エラーを取得することが出来ます。
また、このモデルのインスタンスによって定義された動的な属性に対しても、例えば
`$model->name`
や
`$model->email`
のようにして、アクセスすることが出来ます。
また、このモデルのインスタンスによって定義された動的な属性に対しても、例えば
`$model->name`
や
`$model->email`
のようにして、アクセスすることが出来ます。
...
@@ -294,7 +294,7 @@ Yii のリリースに含まれている [コアバリデータ](tutorial-core-v
...
@@ -294,7 +294,7 @@ Yii のリリースに含まれている [コアバリデータ](tutorial-core-v
function
(
$attribute
,
$params
)
function
(
$attribute
,
$params
)
```
```
属性が
検証
に失敗した場合は、メソッド/関数 は
[
[yii\base\Model::addError()
]
] を呼んでエラーメッセージをモデルに保存し、後で読み出してエンドユーザに示ことが出来るようにしなければなりません。
属性が
バリデーション
に失敗した場合は、メソッド/関数 は
[
[yii\base\Model::addError()
]
] を呼んでエラーメッセージをモデルに保存し、後で読み出してエンドユーザに示ことが出来るようにしなければなりません。
下記にいくつかの例を示します。
下記にいくつかの例を示します。
...
@@ -330,7 +330,7 @@ class MyForm extends Model
...
@@ -330,7 +330,7 @@ class MyForm extends Model
}
}
```
```
> Note|注意: 既定では、インラインバリデータは、関連付けられている属性が空の入力値を受け取ったり、既に何らかの
検証
規則に失敗したりしている場合には、適用されません。
> Note|注意: 既定では、インラインバリデータは、関連付けられている属性が空の入力値を受け取ったり、既に何らかの
バリデーション
規則に失敗したりしている場合には、適用されません。
> 規則が常に適用されることを保証したい場合は、規則の宣言において [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] および/または [[yii\validators\Validator::skipOnError|skipOnError]] のプロパティを false に設定することが出来ます。
> 規則が常に適用されることを保証したい場合は、規則の宣言において [[yii\validators\Validator::skipOnEmpty|skipOnEmpty]] および/または [[yii\validators\Validator::skipOnError|skipOnError]] のプロパティを false に設定することが出来ます。
> 例えば、
> 例えば、
>
>
...
@@ -345,7 +345,7 @@ class MyForm extends Model
...
@@ -345,7 +345,7 @@ class MyForm extends Model
スタンドアロンバリデータは、
[
[yii\validators\Validator
]
] またはその子クラスを拡張するクラスです。
スタンドアロンバリデータは、
[
[yii\validators\Validator
]
] またはその子クラスを拡張するクラスです。
[
[yii\validators\Validator::validateAttribute()
]
] メソッドをオーバーライドすることによって、その検証ロジックを実装することが出来ます。
[
[yii\validators\Validator::validateAttribute()
]
] メソッドをオーバーライドすることによって、その検証ロジックを実装することが出来ます。
[
インラインバリデータ
](
#inline-validators
)
でするのと同じように、属性が
検証
に失敗した場合は、
[
[yii\base\Model::addError()
]
] を呼んでエラーメッセージをモデルに保存します。
[
インラインバリデータ
](
#inline-validators
)
でするのと同じように、属性が
バリデーション
に失敗した場合は、
[
[yii\base\Model::addError()
]
] を呼んでエラーメッセージをモデルに保存します。
例えば、
例えば、
```
php
```
php
...
@@ -365,26 +365,26 @@ class CountryValidator extends Validator
...
@@ -365,26 +365,26 @@ class CountryValidator extends Validator
```
```
あなたのバリデータで、モデル無しの値の
検証
をサポートしたい場合は、
[
[yii\validators\Validator::validate()
]
] もオーバーライドしなければなりません。
あなたのバリデータで、モデル無しの値の
バリデーション
をサポートしたい場合は、
[
[yii\validators\Validator::validate()
]
] もオーバーライドしなければなりません。
または、
`validateAttribute()`
と
`validate()`
の代りに、
[
[yii\validators\Validator::validateValue()
]
] をオーバーライドしても構いません。
または、
`validateAttribute()`
と
`validate()`
の代りに、
[
[yii\validators\Validator::validateValue()
]
] をオーバーライドしても構いません。
と言うのは、前の二つは、デフォルトでは、
`validateValue()`
を呼び出すことによって実装されているからです。
と言うのは、前の二つは、デフォルトでは、
`validateValue()`
を呼び出すことによって実装されているからです。
## クライアント側での
検証
<a name="client-side-validation"></a>
## クライアント側での
バリデーション
<a name="client-side-validation"></a>
エンドユーザが HTML フォームで値を入力する際には、JavaScript に基づくクライアント側での
検証が提供され
ることが望まれます。
エンドユーザが HTML フォームで値を入力する際には、JavaScript に基づくクライアント側での
バリデーションを提供す
ることが望まれます。
というのは、クライアント側での
検証
は、ユーザが入力のエラーを早く見つけることが出来るようにすることによって、より良いユーザ体験を提供するものだからです。
というのは、クライアント側での
バリデーション
は、ユーザが入力のエラーを早く見つけることが出来るようにすることによって、より良いユーザ体験を提供するものだからです。
あなたも、サーバ側での
検証
*に加えて*
クライアント側での検証
をサポートするバリデータを使用したり実装したりすることが出来ます。
あなたも、サーバ側での
バリデーション
*に加えて*
クライアント側でのバリデーション
をサポートするバリデータを使用したり実装したりすることが出来ます。
> Info|情報: クライアント側での
検証
は望ましいものですが、不可欠なものではありません。
> Info|情報: クライアント側での
バリデーション
は望ましいものですが、不可欠なものではありません。
その主たる目的は、ユーザにより良い体験を提供することにあります。
その主たる目的は、ユーザにより良い体験を提供することにあります。
エンドユーザから来る入力値と同じように、クライアント側での
検証
を決して信用してはいけません。
エンドユーザから来る入力値と同じように、クライアント側での
バリデーション
を決して信用してはいけません。
この理由により、これまでの項で説明したように、常に
[
[yii\base\Model::validate()
]
] を呼び出してサーバ側での
検証
を実行しなければなりません。
この理由により、これまでの項で説明したように、常に
[
[yii\base\Model::validate()
]
] を呼び出してサーバ側での
バリデーション
を実行しなければなりません。
### クライアント側での
検証
を使う <a name="using-client-side-validation"></a>
### クライアント側での
バリデーション
を使う <a name="using-client-side-validation"></a>
多くの
[
コアバリデータ
](
tutorial-core-validators.md
)
は、そのままで、クライアント側での
検証
をサポートしています。
多くの
[
コアバリデータ
](
tutorial-core-validators.md
)
は、そのままで、クライアント側での
バリデーション
をサポートしています。
あなたがする必要があるのは、
[
[yii\widgets\ActiveForm
]
] を使って HTML フォームを作るということだけです。
あなたがする必要があるのは、
[
[yii\widgets\ActiveForm
]
] を使って HTML フォームを作るということだけです。
例えば、下の
`LoginForm`
は二つの規則を宣言しています。
例えば、下の
`LoginForm`
は二つの規則を宣言しています。
一つは、
[
required
](
tutorial-core-validators.md#required
)
コアバリデータを使っていますが、これはクライアント側とサーバ側の両方でサポートされています。
一つは、
[
required
](
tutorial-core-validators.md#required
)
コアバリデータを使っていますが、これはクライアント側とサーバ側の両方でサポートされています。
...
@@ -434,16 +434,16 @@ class LoginForm extends Model
...
@@ -434,16 +434,16 @@ class LoginForm extends Model
<?php
yii\widgets\ActiveForm
::
end
();
?>
<?php
yii\widgets\ActiveForm
::
end
();
?>
```
```
舞台裏では、
[
[yii\widgets\ActiveForm
]
] がモデルで宣言されている
検証規則を読んで、クライアント側の検証
をサポートするバリデータのために適切な JavaScript コードを生成します。
舞台裏では、
[
[yii\widgets\ActiveForm
]
] がモデルで宣言されている
バリデーション規則を読んで、クライアント側のバリデーション
をサポートするバリデータのために適切な JavaScript コードを生成します。
ユーザが入力フィールドの値を変更したりフォームを送信したりすると、クライアント側
の検証
の JavaScript が起動されます。
ユーザが入力フィールドの値を変更したりフォームを送信したりすると、クライアント側
バリデーション
の JavaScript が起動されます。
クライアント側の
検証
を完全に無効にしたい場合は、
[
[yii\widgets\ActiveForm::enableClientValidation
]
] プロパティを false に設定することが出来ます。
クライアント側の
バリデーション
を完全に無効にしたい場合は、
[
[yii\widgets\ActiveForm::enableClientValidation
]
] プロパティを false に設定することが出来ます。
また、個々の入力フィールドごとにクライアント側の
検証
を無効にしたい場合は、入力フィールドの
[
[yii\widgets\ActiveField::enableClientValidation
]
] プロパティを false に設定することも出来ます。
また、個々の入力フィールドごとにクライアント側の
バリデーション
を無効にしたい場合は、入力フィールドの
[
[yii\widgets\ActiveField::enableClientValidation
]
] プロパティを false に設定することも出来ます。
### クライアント側
の検証
を実装する <a name="implementing-client-side-validation"></a>
### クライアント側
バリデーション
を実装する <a name="implementing-client-side-validation"></a>
クライアント側
の検証をサポートするバリデータを作成するためには、クライアント側での検証
を実行する JavaScript コードを返す
[
[yii\validators\Validator::clientValidateAttribute()
]
] メソッドを実装しなければなりません。
クライアント側
バリデーションをサポートするバリデータを作成するためには、クライアント側でのバリデーション
を実行する JavaScript コードを返す
[
[yii\validators\Validator::clientValidateAttribute()
]
] メソッドを実装しなければなりません。
その JavaScript の中では、次の事前定義された変数を使用することが出来ます。
その JavaScript の中では、次の事前定義された変数を使用することが出来ます。
-
`attribute`
: 検証される属性の名前。
-
`attribute`
: 検証される属性の名前。
...
@@ -452,7 +452,7 @@ class LoginForm extends Model
...
@@ -452,7 +452,7 @@ class LoginForm extends Model
-
`deferred`
: Deferred オブジェクトをプッシュして入れることが出来る配列 (次の項で説明します)。
-
`deferred`
: Deferred オブジェクトをプッシュして入れることが出来る配列 (次の項で説明します)。
次の例では、既存のステータスのデータに含まれる有効な値が入力されたかどうかを検証する
`StatusValidator`
を作成します。
次の例では、既存のステータスのデータに含まれる有効な値が入力されたかどうかを検証する
`StatusValidator`
を作成します。
このバリデータは、サーバ側とクライアント側の両方の
検証
をサポートします。
このバリデータは、サーバ側とクライアント側の両方の
バリデーション
をサポートします。
```
php
```
php
namespace
app\components
;
namespace
app\components
;
...
@@ -489,9 +489,9 @@ JS;
...
@@ -489,9 +489,9 @@ JS;
}
}
```
```
> Tip|ヒント: 上記のコード例の主たる目的は、クライアント側
の検証
をサポートする方法を説明することにあります。
> Tip|ヒント: 上記のコード例の主たる目的は、クライアント側
バリデーション
をサポートする方法を説明することにあります。
> 実際の仕事では、[in](tutorial-core-validators.md#in) コアバリデータを使って、同じ目的を達することが出来ます。
> 実際の仕事では、[in](tutorial-core-validators.md#in) コアバリデータを使って、同じ目的を達することが出来ます。
> 次のように
検証
規則を書けばよいのです。
> 次のように
バリデーション
規則を書けばよいのです。
>
>
> ```php
> ```php
> [
> [
...
@@ -499,10 +499,10 @@ JS;
...
@@ -499,10 +499,10 @@ JS;
> ]
> ]
> ```
> ```
### Deferred
な検証
<a name="deferred-validation"></a>
### Deferred
バリデーション
<a name="deferred-validation"></a>
非同期のクライアント側
検証
をサポートする必要がある場合は、
[
Defered オブジェクト
](
http://api.jquery.com/category/deferred-object/
)
を作成することが出来ます。
非同期のクライアント側
バリデーション
をサポートする必要がある場合は、
[
Defered オブジェクト
](
http://api.jquery.com/category/deferred-object/
)
を作成することが出来ます。
例えば、AJAX による
特別な検証
を実行するために、次のコードを使うことが出来ます。
例えば、AJAX による
カスタムバリデーション
を実行するために、次のコードを使うことが出来ます。
```
php
```
php
public
function
clientValidateAttribute
(
$model
,
$attribute
,
$view
)
public
function
clientValidateAttribute
(
$model
,
$attribute
,
$view
)
...
@@ -547,7 +547,7 @@ JS;
...
@@ -547,7 +547,7 @@ JS;
```
```
> Note|注意: 属性が検証された後に、`resolve()` メソッドを呼び出さなければなりません。
> Note|注意: 属性が検証された後に、`resolve()` メソッドを呼び出さなければなりません。
そうしないと、主たるフォームの
検証
が完了しません。
そうしないと、主たるフォームの
バリデーション
が完了しません。
簡潔に記述できるように、
`deferred`
配列はショートカットメソッド
`add()`
を装備しており、このメソッドを使うと、自動的に Deferred オブジェクトを作成して
`deferred`
配列に追加することが出来ます。
簡潔に記述できるように、
`deferred`
配列はショートカットメソッド
`add()`
を装備しており、このメソッドを使うと、自動的に Deferred オブジェクトを作成して
`deferred`
配列に追加することが出来ます。
このメソッドを使えば、上記の例は次のように簡潔に記すことが出来ます。
このメソッドを使えば、上記の例は次のように簡潔に記すことが出来ます。
...
@@ -575,14 +575,14 @@ JS;
...
@@ -575,14 +575,14 @@ JS;
```
```
### AJAX
検証
<a name="ajax-validation"></a>
### AJAX
バリデーション
<a name="ajax-validation"></a>
場合によっては、サーバだけが必要な情報を持っているために、サーバ側でしか検証が実行できないことがあります。
場合によっては、サーバだけが必要な情報を持っているために、サーバ側でしか検証が実行できないことがあります。
例えば、ユーザ名がユニークであるか否かを検証するためには、サーバ側で user テーブルを調べることが必要になります。
例えば、ユーザ名がユニークであるか否かを検証するためには、サーバ側で user テーブルを調べることが必要になります。
このような場合には、AJAX ベースの
検証
を使うことが出来ます。
このような場合には、AJAX ベースの
バリデーション
を使うことが出来ます。
AJAX
検証は、通常のクライアント側での検証
と同じユーザ体験を保ちながら、入力値を検証するためにバックグラウンドで AJAX リクエストを発行します。
AJAX
バリデーションは、通常のクライアント側でのバリデーション
と同じユーザ体験を保ちながら、入力値を検証するためにバックグラウンドで AJAX リクエストを発行します。
AJAX
検証
をフォーム全体に対して有効にするためには、
[
[yii\widgets\ActiveForm::enableAjaxValidation
]
] プロパティを
`true`
に設定して、
`id`
にフォームを特定するユニークな ID を設定しなければなりません。
AJAX
バリデーション
をフォーム全体に対して有効にするためには、
[
[yii\widgets\ActiveForm::enableAjaxValidation
]
] プロパティを
`true`
に設定して、
`id`
にフォームを特定するユニークな ID を設定しなければなりません。
```
php
```
php
<?php
$form
=
yii\widgets\ActiveForm
::
begin
([
<?php
$form
=
yii\widgets\ActiveForm
::
begin
([
...
@@ -591,9 +591,9 @@ AJAX 検証をフォーム全体に対して有効にするためには、[[yii\
...
@@ -591,9 +591,9 @@ AJAX 検証をフォーム全体に対して有効にするためには、[[yii\
]);
?>
]);
?>
```
```
個別の入力フィールドについても、
[
[yii\widgets\ActiveField::enableAjaxValidation
]
] プロパティを設定して、AJAX
検証
を有効にしたり無効にしたりすることが出来ます。
個別の入力フィールドについても、
[
[yii\widgets\ActiveField::enableAjaxValidation
]
] プロパティを設定して、AJAX
バリデーション
を有効にしたり無効にしたりすることが出来ます。
また、サーバ側では、AJAX
検証
のリクエストを処理できるように準備しておく必要があります。
また、サーバ側では、AJAX
バリデーション
のリクエストを処理できるように準備しておく必要があります。
これは、コントローラのアクションにおいて、次のようなコード断片を使用することで達成できます。
これは、コントローラのアクションにおいて、次のようなコード断片を使用することで達成できます。
```
php
```
php
...
@@ -604,7 +604,7 @@ if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
...
@@ -604,7 +604,7 @@ if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) {
```
```
上記のコードは、現在のリクエストが AJAX であるかどうかをチェックします。
上記のコードは、現在のリクエストが AJAX であるかどうかをチェックします。
もし AJAX であるなら、リクエストに応えて
検証
を実行し、エラーを JSON 形式で返します。
もし AJAX であるなら、リクエストに応えて
バリデーション
を実行し、エラーを JSON 形式で返します。
> Info|情報: AJAX
検証を実行するためには、[Deferred な検証
](#deferred-validation) を使うことも出来ます。
> Info|情報: AJAX
バリデーションを実行するためには、[Deferred バリデーション
](#deferred-validation) を使うことも出来ます。
しかし、ここで説明された AJAX
検証
の機能の方がより体系化されており、コーディングの労力も少なくて済みます。
しかし、ここで説明された AJAX
バリデーション
の機能の方がより体系化されており、コーディングの労力も少なくて済みます。
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