複数項目のバリデーション
1ルールで複数項目に渡ってバリデーションを行いたい場合は、独自のバリデーションメソッドを作成してルールに指定します。
例えば、Businessモデルで開始時間(open)と終了時間(close)の両方入力されているか確認するバリデーション設定は以下のようになります。
class Business extends AppModel { public $validate = [ 'open' => [ 'time' => [ 'rule' => 'time', 'message' => '時間を入力してください', 'allowEmpty' => true, ], 'hours' => [ 'rule' => 'businessHours', 'message' => '終了時間も入力してください', ] ], 'close'=> [ 'time' => [ 'rule' => 'time', 'message' => '時間を入力してください', 'allowEmpty' => true, ], 'hours' => [ 'rule' => 'businessHours', 'message' => '開始時間も入力してください', ] ] ]; public function businessHours() { return !($this->data[$this->name]['open'] xor $this->data[$this->name]['close']); } }