栃木県のJavaエンジニア、WEBプログラマーのためのサイト

2015.08.21[CakePHP] モデルで複数項目のバリデーション

複数項目のバリデーション

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']);
    }
}

参考