Cakephpでmodelのvalidationだけを利用したい

save系のmodelメソッドはvalidate処理を含む

CakephpのsaveやsaveAllはvalidationを内部で実行している

saveやsaveAllだけでなく、saveAssociatedなども同様に内部でvalidationを実行している。

if( $this->Model->save(h($this->data)) )
{

}

else
{

}

saveで一括してvalidate処理まで行ってくれるので便利ではある。上の処理でvalidateがokであればデータベースに値まで格納してくれる。しかし、データベースに値を入れたくない場合はどうすればよいだろうか?

Modelのバリデーションのみ行いdbに値を入れたくない場合がCakephpを利用していると遭遇する。saveメソッドはdbに値を入れることを主体に考えたメソッドであり、validationをオフにすることは可能。

Modelのvalidatesメソッドを利用する前にsetする

validationのみを利用する場合は、saveではなくvalidatesメソッドを利用する。その前にModelのsetメソッドでvalidation対象のデータをsetする必要がある。

$this->Model->set(h($this->data));
if( $this->Model->validates() )
{

}

上のように事前にsetしてあげる必要がある。このように設定することでデータベースに値を格納することなくModelのvalidationが利用できる。

validationのみを利用するシーンとはどのようなケースか?

上でも書いたが、validationとデータの格納(save)を分けたいときに用いられるパターンが多い。例えば、

Ajaxのchangeリクエストを設定したemailのテキストボックスがあり、フォーカスの移動と同時にメールアドレスの妥当性を非同期に検証したい場合などに利用できる。emailの検証はフロント側でも行うことができるが、サーバ側でも実施することが推奨されている。

validateメソッドを利用してModelの検証機能を利用できるノウハウはおぼえておきたい。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Cakephpでmodelのvalidationだけを利用したいの記事にコメントを投稿

Validate