CakePHP3で値を入力直後にバリデーションする方法解説
2019/03/25
CakePHP3で入力された値を入力直後にバリデーションする処理
CakePHP3の入力チェックは、データベースに情報を保存する際にエラー処理を行っていますが、入力された値を何かしら加工をして、それから保存する場合など、あらかじめ入力チェックをしておきたい、と思う場面もあるでしょう。
そういう場合に、入力直後にバリデーション(入力チェック)を行う処理も用意されていますので、その処理について解説を行います。
CakePHP3で Bakeしたデフォルトの処理
CakePHP3で、リンクの情報を登録する「Links」というテーブルを作成し、Bakeして作成されたデフォルトの処理が下記になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public function add() { $link = $this->Links->newEntity(); if ($this->request->is('post')) { $link = $this->Links->patchEntity($link, $this->request->data); if ($this->Links->save($link)) { $this->Flash->success(__('The site link has been saved.')); return $this->redirect(['action' => 'index']); } else { $this->Flash->error(__('The site link could not be saved. Please, try again.')); } } $this->set(compact('link')); $this->set('_serialize', ['link']); } |
CakePHP3で入力直後にバリデーションの処理を追加
前項の Bakeで作成されたデフォルトのプログラムに対して、6~10行目、20行目を追加することで、入力の値を受け取った直後にバリデーション処理を実施することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public function add() { $link = $this->Links->newEntity(); if ($this->request->is('post')) { $link_check = $this->Links->newEntity($this->request->data); if ($link_check->errors()){ // 入力エラーの処理 $this->Flash->error(__('The site name could not be saved. Please, try again.')); } else { $link = $this->Links->patchEntity($link, $this->request->data); if ($this->Links->save($link)) { $this->Flash->success(__('The site link has been saved.')); return $this->redirect(['action' => 'index']); } else { $this->Flash->error(__('The site link could not be saved. Please, try again.')); } } } $this->set(compact('link')); $this->set('_serialize', ['link']); } |
「newEntity()」で取得する入力値のオブジェクトに対して、受け取った直後にバリデーション(入力チェック)を行う処理を追加しています。
CakePHP3でのバリデーション処理の詳細解説
細かく説明しますと、6行目の「newEntity()」の処理で、リクエストデータを設定します。
1 2 3 |
$link = $this->Links->newEntity(); ↓この中に「$this->request->data」を追加 $link_check = $this->Links->newEntity($this->request->data); |
7行目の「$link_check->errors()
」で、バリデーション処理で発生したエラーの情報を取得し、エラーがある場合は、エラー処理を行います。
1 2 3 4 |
if ($name->errors()){ // 入力エラーの処理 $this->Flash->error(__('The site name could not be saved. Please, try again.')); } |
これにより、入力エラーがある場合は、入力画面に戻り、画面上部にエラーメッセージを表示することができるようになります。
Tableファイルにバリデーションルールを追加
バリデーションのルールの詳細はまた改めて記事を書く予定ですが、バリデーションのルールを追加する場合は、Tableファイルにバリデーションルールを追加します。
下記の例では 8行目に追加しています。
この場合の「not-url」は、バリデーションのルールの名称ですので、他のルール名称とかぶっていなければ、「aaa」「bbb」などでも問題ありません。
※LinksTable.php
1 2 3 4 5 6 7 8 9 10 |
public function validationDefault(Validator $validator) { : : $validator ->requirePresence('url', 'create') ->notEmpty('url') ->add("url","not-url",["rule"=>"url","message"=>"Enter a valid URL"]); // ↑この「not-url」はバリデーションのルールの名称 // 他のルールとかぶらないように適当に付ければOK |
バリデーションで出力されるエラー
最後に、「$link_check->errors()
」で取得できるエラーについてです。
取得できるエラーは以下のような形となっています。
エラーの出力される際にどのエラー処理なのか、その出力される項目名が、前項で解説をしたバリデーションのルールの名称となります。
1 2 3 4 |
[url] => Array ( [not-url] => Enter a valid URL ) |
詳細については、CakePHP3のマニュアルを参照してください。
https://book.cakephp.org/3.0/ja/core-libraries/validation.html#id13
ちなみに、ほぼ同じ内容ですが、フォームから入力された情報を保存する前にバリデーションをする記事を書きました。こちらもあわせて参考にしてください。
CakePHP3で保存前にバリデーション結果を取得する2つの方法
CakePHP3の関連記事
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールするCakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説
CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。
-
-
CakePHP3の検索プラグイン「friendsofcake/search」の設置方法・CakePHP3.6対応
CakePHP3で検索を担うプラグイン「friendsofcake/search」の紹介。基本的な設置方法の紹介のほか、処理の記述方法のバリエーション、エラーの解説など。CakeDC/searchより導入は簡単!
-
-
CakePHP 2.3 テーブルの項目を演算した結果を条件として抽出する方法
アソシエーション(連携)している先のテーブルの項目で演算をする場合の考え方と注意点をサンプルソースを用いて説明しています。分かってしまえば簡単です。
-
-
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3のkeywordsとdescriptionを設定する方法の解説。CakePHP3にはmetaタグを編集するHTMLヘルパーが用意されているためそれを利用すればOK!ポイントはブロック化を有効にすること。
-
-
CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
-
CakePHP 2.3でファイルのアップロード処理を作る
CakePHPでプラグインを使わないファイルアップロード処理を解説します。簡単です。DBにファイルを格納する方法も。
-
-
CakePHP 2.3で saveの便利な使い方・サンプルソース付き
CakePHPのレコードを保存、更新する際に使う Saveを詳細解説します。
-
-
CakePHP 2.3 主キー(ID)以外のキーで更新方法 updateAll
主キー(ID)以外のカラムをキーとして更新する方法、updateAllの使い方をサンプルを用いて解説します。
-
-
CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で入力エリア一つで複数の項目を同時に検索する方法を解説。
-
-
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP4のコマンド(シェル)に対して、環境変数を指定して実行する方法を解説。LinuxとWindows上のXAMPPとでは記述方法が異なるため、Windowsのsetコマンドについても詳細解説。