CakePHP で Table の Validator を差し替える #cakephp

以前 Validation をカスタムしやすくする方法を書いた。

su-kun1899.hatenablog.com

Validation は bootstrap.php で差し替えればいいんだけれど、じゃあ自前で呼ばない Table の Validator を差し替えるにはどうしたらいいのか。

Table での Validation

Table クラスでの既定のバリデーションは、 validationDefault() で行われる。

インターフェースとしては Validator を引数で受け取る形になっており、ここを差し替えたい。

<?php
public function validationDefault(Validator $validator)
{
    $validator
        ->requirePresence('title', 'create')
        ->notEmpty('title');

    ...

    return $validator;
}

initialize で書き換えればよい

Table クラスの initialize で、 _validatorClass を差し替えてあげればよさそう。

<?php
public function initialize(array $config): void
{
    $this->_validatorClass = MyValidator::class;;
}

ドキュメントにもちゃんと書いてあった。

https://book.cakephp.org/4/en/orm/validation.html#default-validator-class

横断的に差し替えたいとなったら、基底クラス用意するのがいいのかなー。