エス技研

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.

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

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

  関連記事

CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ

CakeDC謹製Usersプラグインの紹介。UserHelperを利用し、ログアウトのリンクや権限があるときのみ表示されるリンク、プロフィールページへのリンク、reCAPTCHAの設置方法などを解説。

CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応
CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応

CakePHP3.7でCookieを保存、取り出し、削除する方法を解説。CakePHP3でのCookieの取り扱いはバージョンごとに変更されるため、環境に合わせた方法を探す必要がある。

CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説

CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。

CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法

CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。

CakePHP3のインストールでURL rewriting......のエラーが!その解決方法解説
CakePHP3のインストールでURL rewriting……のエラーが!その解決方法解説

CakePHP3をインストールしたら URL rewriting is not properly configured.のエラーが。原因は.htaccessが有効になっていないこと。httpd.confに設定を追加すればOK。

CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法

コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!

CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能

CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。

CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい

アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。

VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する。
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する

VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。

CakePHP 2.3で saveの便利な使い方・サンプルソース付き

CakePHPのレコードを保存、更新する際に使う Saveを詳細解説します。