エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説

   

CakePHPで入力値によってバリデーションを切り替える

 

CakePHP 2でバリデーションを条件によって切り替える方法

 
入力フォームから入力された項目によって、バリデーション(入力チェック)の内容を変えたい、という場面があると思いますが、その方法を CakePHPで実装する方法を解説します。
 
対象バージョン:CakePHP2系(CakePHP 2.2以上)
 
参考サイト
https://book.cakephp.org/2.0/ja/models/data-validation.html#id11
 
 

条件によってバリデーションの内容を変える具体的な例

 
想定している具体的なイメージは下記のような感じです。
 
「連絡手段を選択し、選択した連絡手段の連絡先の情報を入力してください。」
 
01_CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説
 
上記の入力フォームで、「連絡手段」の選んだ選択肢によって、「連絡先情報」の入力内容が変わるため、それに合わせて「連絡先情報」のバリデーションの内容を変更する必要があります。
 
 「連絡手段:電話」 の場合は、電話番号チェック
 「連絡手段:メール」の場合は、メールアドレスチェック
 「連絡手段:郵送」 の場合は、郵便番号チェック
 「連絡手段:その他」の場合は、必須チェックのみ
 
 

CakePHPで unsetを利用して入力値を条件としてバリデーションを切り替える具体的なソースコードと解説

 

バリデーションを切り替える処理の実装手順

 
実装の手順としては以下の通りです。
 
1.Modelに、必要なバリデーションを記述します。
2.Controllerに、条件よって使わないバリデーションを削除する処理を記述します。
 
 

1.Modelに、必要なバリデーションを記述

 
では、具体的なソースコードを確認していきます。
 
まず、Modelに記述するバリデーションの内容です。
コメントを書いていますが、必須チェックのほか、電話番号、メールアドレス、郵便番号の入力チェックを行うバリデーションを記述しています。
 

 
上記の「rule」では、
/^\d{10,11}$/」(10桁~11桁の数値)
/^\d{3}-\d{4}$/」(3桁の数値 + 「-」 + 4桁の数値)
のように、正規表現を使って入力条件を指定しています。
 
 

2.Controllerに、条件よって使わないバリデーションを削除する処理を記述

 
続いて、1で設定したバリデーションを、条件によって使わない処理を記述していきます。
 
入力された「連絡手段」を「$this->request->data['Contact']['method']」で取得し、電話の場合、メールの場合、電話の場合と振り分け、必要ないバリデーションを「unset」コマンドで削除していきます。
 
その結果、必要なバリデーションだけが残り、その処理が実行される、という仕組みになっています。
 

 
 
ちなみに、この「unset」は CakePHP 2.2で追加されたため、CakePHP 2系でも 2.2より前のものではこの方法は使えません。
 
 

CakePHPで条件によってバリデーションを振り分ける処理のまとめ

 
入力条件によってバリデーションを振り分ける処理として、今回は「unset」関数を使ってすでにあるバリデーションを削除していく、という処理で条件に合致するバリデーションを指定する方法を紹介しました。
 
これ以外にも方法はあるようですが、この方法は理解しやすく、実装しやすい方法だと感じます。

 - CakePHP 2.x 3.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

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

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説

CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。

CakePHP 2.3 Search Pluginで検索処理 その2表示件数を動的に変える方法

CakePHPの検索プラグイン Search Pluginの検索処理の中で動的に表示件数を変える方法です。

CakePHP 2.3 ID以外のカラムでアソシエーション(連携)をさせる場合の詳細ページの注意点

ID以外のカラムでアソシエーション(連携)させて詳細ページを表示させる際の考え方と注意点をサンプルソースを用いて解説しています。

CakePHP 2.x系 Viewでのコメントの記述方法など

CakePHPにおいて View、ctpファイルでコメントを記述する方法を解説。

CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法
CakePHP2の検索Plugin CakeDC/Searchで重複を省くgroup by(distinct)の実装方法

CakePHP2の検索プラグイン「CakeDC/Search」で、重複レコードを省くgroup by、distinctを使う方法についての解説。設定する場所はpaginatorの条件とするので、find()関数と同じ。

CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法
CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法

CakePHP3に付属しているデバッグのためのツール、デバッグキットを強制的に有効化、無効化する方法を解説。初期設定では開発環境としてありそうなドメインの場合のみ有効になるように設定されている。

CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3で生の SQLの実行はConnectionManagerを使う

CakePHP3で生の SQL文を実行する方法を解説。クリエビルダーを使う場合は TableRegistryを利用するが、SQLを実行する場合は ConnectionManagerを使う。プリペアードステートメントの使用方法も解説。

CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2
CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその2でバリデーションなどの実用的なカスタマイズ方法を解説。

CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説

CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。

CakePHP3のForm Helperの使い方のまとめ

CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。