バリデーションをマスターする (6/6)
作成:2015-10-17 15:42
更新:2015-10-17 15:42
更新:2015-10-17 15:42
■Validatorを作成して利用する
テーブルクラスにvalidationDefaultを使ってバリデーションルールを用意しておくやり方だと、エンティティだけしかチェックができません。が、Validatorをその場で作成し利用することができれば、いろいろと応用の幅が広がります。
コントローラーでValidatorを利用する場合は、まず以下のuse文を追記しておきます。
では、実際に簡単なルールを追加して実行するaddメソッドのサンプルを上げておきましょう。下のリストでは、ageに20より大きい値のみ受け付けるルールを追加しています。作成したバリデーションのチェックは、こうやっています。
コントローラーでValidatorを利用する場合は、まず以下のuse文を追記しておきます。
use Cake\Validation\Validator;これで、Validatorクラスが使えるようになります。Validatorのインスタンスは、単にnewで作成するだけで作成できます。
$validator = new Validator();簡単ですね。そして、先ほどのaddメソッドなどを使ってバリデーションルールを追加していきます。ルールの追加が完了したら、「errors」メソッドを使ってエラーチェックをします。
$変数 = $validator->errors( チェックするデータ );注意したいのは、引数に指定するのはエンティティインスタンスではなく、連想配列である、という点でしょう。返値は、発生したエラーの情報を配列にまとめたものになります。もしemptyならエラーはない、ということになります。
では、実際に簡単なルールを追加して実行するaddメソッドのサンプルを上げておきましょう。下のリストでは、ageに20より大きい値のみ受け付けるルールを追加しています。作成したバリデーションのチェックは、こうやっています。
$errors = $validator->errors($this->request->data);チェックする対象は、送信されたフォームの情報であり、エンティティ($person)ではないので注意しましょう。また、これとは別に、$personではテーブルクラスのvalidationDefaultに用意されたバリデーションもチェックされます。validationDefaultの代りになるわけではないので注意してください。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public function add() { $person = $this ->Persons->newEntity(); $this ->set( 'person' , $person ); if ( $this ->request->is( 'post' )) { $validator = new Validator(); $validator ->add( 'age' , 'comparison' ,[ 'rule' =>[ 'comparison' , '>' ,20]] ); $errors = $validator ->errors( $this ->request->data); if (! empty ( $errors )){ $this ->Flash->error( 'comparison error' ); } else { $person = $this ->Persons->patchEntity( $person , $this ->request->data); if ( $this ->Persons->save( $person )) { return $this ->redirect([ 'action' => 'index' ]); } } } } |
※関連コンテンツ
「初心者のためのCakePHP3 プログラミング入門」に戻る