Cake4 では Cake2 時代では存在していた beforeValidate()
が存在していません。
なので、Cake4 では beforeMarshal()
の利用を検討します。
Cake2: beforeValidate の例
public function beforeValidate($options = []) { // バリデート検証処理サイクルへ進む前にデータを整えておきたい処理など }
beforValidate()
の役目は、検証処理へ進む前に予めユーザ入力からのデータ構造を整えたりする、といったことが考えられると思います。
それらの処理は、Cake4 では beforeMarshal()
で補うことが可能です。
Cake4: beforeMarshal の例
use ArrayObject; use Cake\Event\EventInterface; /** * Cake2時代のbeforValidateの代替として、beforeMarshalを利用 * * @param \Cake\Event\EventInterface $event イベントオブジェクト * @param \ArrayObject $data リクエストデータ群 * @param \ArrayObject $options オプション * @return void|null */ public function beforeMarshal(EventInterface $event, ArrayObject $data, ArrayObject $options) { // beforeValidateで処理していた内容を移行できる // $data['name'] などでリクエストデータにアクセス可能 }
注意したいことは、処理のライフサイクルの各役目だと思います。厳密には newEntity()
でエンティティ生成のバリデート前に beforeMarshal()
が発火するので、例えば、それが保存手前で処理を入れたい場合は beforeSave()
になるでしょう。
本バリデートはバリデート自体に任せればよいと思います。
■ Cakephp4: beforeMarshal
https://book.cakephp.org/4/ja/orm/table-objects.html#beforemarshal
■ Cakephp4: エンティティー構築前のリクエストデータ変更
https://book.cakephp.org/4/ja/orm/saving-data.html#before-marshal