たなちの備忘録

自分の知識をストックしていくためのブログ

【CakePHP3】Validationの書き方

スポンサーリンク

渡されたデータのチェックを行う機能のことをバリデーションといい、デフォルトのバリデーションはhoegTable.phpで書かれる。チェックしたいフィールドに対してルールを書き足していくような書き方をする。

<?php

use Cake\Validation\Validator;

public function validationDefault(Validator $validator)
{
  $validator
    ->notEmpty('title')
    ->requirePresence('title')

    ->notEmpty('body')
    ->requirePresence('body')
    ->add('body', [
      'length' => [
        'rule' => ['minLength', 10],
        'message' => 'body length must be 10+'
      ]
    ]);

  return $validator;
}

引数にValidatorクラス(Cake\Validation\Validator)のインスタンスが渡される。このクラスがvalidationを管理し、渡されたvalidatorはエンティティの保存作業が行われるときに利用される。

バリデーションルールの追加

<?php
$validator->add(フィールド, [ ルール設定 ]); 
$validator->add(フィールド, ルール名, ['rule'=> ルール設定 ]); 

最初に書いたサンプルのように、第2引数のルール設定に連想配列を設定する書き方や

<?php
$validator->add(
    'name','length',['rule'=>['minLength',6]]
);

のような書き方をすることができる。
addで設定する主なバリデーションルールはこちら

短縮した書き方

<?php
$validator
    ->email('username')
    ->ascii('username')
    ->lengthBetween('username', [4, 8]);

こんな書き方も可能。
https://book.cakephp.org/3.0/ja/core-libraries/validation.html#id6

※バリデーションのメソッドを提供しているのはValidatorクラスではなく、「プロバイダー」なるものから提供されている。デフォルトのプロバイダーは、Validation\Validation のクラスにマッピングされているとのこと。
https://book.cakephp.org/3.0/ja/core-libraries/validation.html#id7

また、CakePHP3でバリデーションはコントローラークラスのadd()やedit()処理内のsave()でエンティティの保存を行う際に自動で行われる。