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()」の値をバリデーションしてます。
終わりに
以上となります。
バリデーションはユーザーの使いやすさやセキュリティの面で必須な機能です。
いろいろな方法があるので、適したものを使ってみてください。
ありがとうございました。