バリデーションをマスターする (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にしてみてください。
●プログラム・リスト●
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 プログラミング入門」に戻る