CakePHP3でバリデーションを発動させる3つの方法

CakePHP3でバリデーションを発動させたいとき、ありますよね。

なぜか発動してくれないときとか、もどかしいです。

バリデーションを発動させる3つの方法について説明します。

※目次のタイトルではわかりやすく「$this->Users」としていますが、「$table」と読み替えて問題ありません。

【自分の環境】
macOS Catalina
PHP7.4.2
CakePHP3.8
MAMP5.7
Apache2.2
MySQL5.7

①$this->Users->newEntity()

まず1つ目はnewEntity()メソッドです。

これはエンティティの作成時に使うメソッドですね。

Usersテーブルがidカラム(auto_increment)、nameカラム、roleカラムの構成で、かつPOSTでデータが送られている場合、以下のようなかんじで使用します。

$data = [
                    'name' => $this->request->getData('name'),
                    'role' => $this->request->getData('role'),
                ];
$user = $this->Users->newEntity($data);

これで「newEntity($data)」のところでそれぞれのカラムの値をバリデーションしてくれます。

②$this->Users->patchEntity()

patchEntity()メソッドの時も発動されます。

patchEntity()はエンティティの更新です。

patchEntity()の実用場面については、たくさん文献があるので調べてみてください。

③$this->Users->validate()

最後はvalidate()メソッドです。

これは自分で明示的にバリデーションしたい、というときに使えるメソッドです。

なぜかバリデーションされないな…というときに強引にバリデーションさせたい、という場面で使用したりしました。

以下は実用場面です。

$contacts = new ContactsForm();
$contacts->validate($this->request->getData())

2行目で「$this->request->getData()」の値をバリデーションしてます。

終わりに

以上となります。

バリデーションはユーザーの使いやすさやセキュリティの面で必須な機能です。

いろいろな方法があるので、適したものを使ってみてください。

ありがとうございました。