libro
www.tuyano.com
初心者のためのCakePHP3 プログラミング入門

バリデーションをマスターする (6/6)

作成:2015-10-17 15:42
更新:2015-10-17 15:42

■Validatorを作成して利用する

テーブルクラスにvalidationDefaultを使ってバリデーションルールを用意しておくやり方だと、エンティティだけしかチェックができません。が、Validatorをその場で作成し利用することができれば、いろいろと応用の幅が広がります。

コントローラーで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の代りになるわけではないので注意してください。

※プログラムリストが表示されない場合

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 プログラミング入門」に戻る