Cakephp PHP WEB開発

【Cakephp2→4】バリデーションの移行

※本サイトはPR表記を含みます。

Cake2とCake4でのバリデーションの記述はかなり違うようになっています。

以下、各バリデーションの基本的な書き方の違いです。

Cake2: バリデーション

public $validate = [
    'name' => [
        'notBlank' => ['rule' => ['notBlank'], 'message' => '入力してください'],
    ],
];

Cake2は $validate という変数名を利用する、それを配列形式で定義していくことで利用できるようになっていました。

Cake4: バリデーション

use Cake\Validation\Validator;

// クラス内にて記述
/**
* デフォルトバリデーション
*
* @param \Cake\Validation\Validator $validator A Validator instance
* @return \Cake\Validation\Validator
*/
public function validationDefault(Validator $validator): Validator
{
    $validator
        ->notEmptyString('name', '入力してください');

    return $validator;
}

Cake4ではデフォルトのバリデーションとして validationDefault() を定義し、コントローラー側の newEntity() などでのサイクルの一部で実行されます。

もちろん、別のバリデーションメソッド名は別の名前も定義できますが、メソッド名の接頭辞に validation と付与する必要があります。

また、別名バリデーションを利用する際は、newEntity() 時の第二引数で ['validate' => 'hoge'] など、接頭辞の validation を省略して指定する必要があります。

// テーブル: バリデーション名を付ける場合は接頭辞に validation を付与する
public function validationHoge(Validator $validator): Validator

// コントローラー: 適用させたいバリデーションルールを指定する場合は validation を省略
$this->Hoges->newEntity($entity, ['validate' => 'hoge']);

ちなみにカスタムバリデーションなどの移行に関してはこちらを参考に。

■ Cake4: バリデーション
https://book.cakephp.org/4/ja/core-libraries/validation.html

■ Cake4: 異なるバリデーションセットの使用
https://book.cakephp.org/4/ja/orm/validation.html#id4

-Cakephp, PHP, WEB開発
-