CakePHP3のCakeDC/Usersのバリデーションのカスタマイズ方法解説
2019/03/28
CakeDC/Usersのバリデーションのカスタマイズ方法解説
「CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応」の記事で、CakePHP3で CakeDC/Usersを使ってログイン認証機能を実装する手順を解説しました。
また、「CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説」の記事で、HTMLのテンプレートを変更する解説をしました。
今回の記事では、その時に解説できなかった、入力画面でのバリデーションのカスタマイズ方法について解説します。
CakeDC/Usersのバリデーションが記載されているファイル
CakeDC/Usersのバリデーションが記載されているファイルは、以下のファイルになります。
/vendor/cakedc/users/src/Model/Table/UsersTable.php
このファイルに記述されているバリデーションの内容を変更することで、バリデーションのカスタマイズを行うことは可能です。
ですが、一般的にはこのファイルはプラグイン「CakeDC/Users」のコアファイルになりますので、このファイルを直接更新することはせず、オーバーライドする処理を構築します。
CakeDC/Usersのバリデーションをオーバーライドでカスタマイズする
1.bootstrap.phpの編集
下記のファイルに編集を行います。
/config/bootstrap.php
下記の、configファイルとして「/config/users.php」も利用する処理を記述します。
1 2 |
Configure::write('Users.config', ['users']); Plugin::load('Users', ['routes' => true, 'bootstrap' => true]); |
すでに Usersプラグインのロード処理を記述している場合は、1行目のみ追記します。
これは、「CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説」の記事で、リダイレクトの処理の設定をする際にも記述しますので、リダイレクトなどほかの設定ですでに記述している場合もあるかと思います。
2.users.phpの編集
下記のファイルに編集を行います。該当のファイルがない場合は、新規作成をします。
/config/users.php
下記の値を編集します。
1 2 3 4 5 6 7 8 9 |
<?php use Cake\Core\Configure; use Cake\Routing\Router; $config = [ 'Users' => [ 'table' => 'Users', ], ]; return $config; |
標準設定は、「/vendor/cakedc/users/config/users.php」に下記の様に記載されています。
1 2 3 4 5 |
$config = [ 'Users' => [ //Table used to manage users 'table' => 'CakeDC/Users.Users', : |
「/config/users.php」は、「CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ」で解説をした reCAPTCHAでも利用しますので、すでに設定がある場合もあるでしょう。
3.Model/Entity/User.phpの編集
下記のファイルに編集を行います。該当のファイルがない場合は、新規作成をします。
/src/Model/Entity/User.php
下記の処理を編集します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php namespace App\Model\Entity; use CakeDC\Users\Model\Entity\User as UserParent; use Cake\Core\Configure; use Cake\I18n\Time; use Cake\ORM\Entity; use Cake\Utility\Text; use DateTime; class User extends UserParent { } |
この内容は、プラグインの Entity「/vendor/cakedc/users/src/Model/Entity/User.php」の内容を流用しています。
4.Model/Table/UsersTable.phpの編集
下記のファイルに編集を行います。該当のファイルがない場合は、新規作成をします。
/src/Model/Table/UsersTable.php
そして、ようやく、バリデーションの処理を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
<?php namespace App\Model\Table; use CakeDC\Users\Model\Table\UsersTable as UsersTableParent; use Cake\ORM\Query; use Cake\ORM\RulesChecker; use Cake\ORM\Table; use Cake\Utility\Hash; use Cake\Validation\Validator; /** * Users Model */ class UsersTable extends UsersTableParent { public function validationDefault(Validator $validator) { $validator ->allowEmpty('id', 'create'); $validator ->requirePresence('username', 'create') ->notEmpty('username'); $validator ->requirePresence('password', 'create') ->notEmpty('password'); $validator // ->allowEmpty('first_name'); ->notEmpty('first_name'); $validator ->allowEmpty('last_name'); $validator ->allowEmpty('token'); $validator ->add('token_expires', 'valid', ['rule' => 'datetime']) ->allowEmpty('token_expires'); $validator ->allowEmpty('api_token'); $validator ->add('activation_date', 'valid', ['rule' => 'datetime']) ->allowEmpty('activation_date'); $validator ->add('tos_date', 'valid', ['rule' => 'datetime']) ->allowEmpty('tos_date'); return $validator; } } |
18行目以降の「validationDefault()」の内容は、下記のプラグインの標準設定の内容をコピペしてからカスタマイズしています。
/vendor/cakedc/users/src/Model/Table/UsersTable.php
上記の例では、33行目の処理で、「first_name」を必須項目にする、という処理に変更してみています。
これで、プラグインのファイルを触らずに、バリデーションをカスタマイズすることができるようになります。
※サンプルソースを修正しました(2019.03.27)
上記のサンプルソースをそのままコピペした場合、下記のエラーが発生する場合がありました。
Error: Class 'CakeDC\Users\Model\table\UsersTable' not found
File /home/ss-giken/ttt.onl/public_html/src/Model/Table/UsersTable.php
そのため、下記の点を修正しました。
1 2 3 4 5 |
// 修正前 use CakeDC\Users\Model\table\UsersTable as UsersTableParent; // 修正後 use CakeDC\Users\Model\Table\UsersTable as UsersTableParent; |
修正点は「Model\Table」の部分の「T」を小文字から大文字にしました。
ローカル(Windows)の XAMPP環境では問題ありませんでしたが、LAMP環境のサーバにアップしたらエラーが発生しました。
既存のバリデーションの英語のメッセージを日本語化する
/vendor/cakedc/users/src/Model/Table/UsersTable.php
には、
「パスワード」と「パスワード確認用」の入力値が同じかどうかチェック
「ユーザ名」「メールアドレス」がすでに使用されていないかどうかチェック
のバリデーションも含まれています。
これもバリデーションとして使われていますが、エラーのときのメッセージが英語で表示されます。
この英語のメッセージを変更する方法の一つとして、
/src/Model/Table/UsersTable.php
に、下記の関数部分のソースコードをコピペして、エラーメッセージ部分の「Username already exists」を日本語に変えることで対応することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public function buildRules(RulesChecker $rules) { $rules->add($rules->isUnique(['username']), '_isUnique', [ 'errorField' => 'username', 'message' => __d('CakeDC/Users', 'Username already exists') ]); if ($this->isValidateEmail) { $rules->add($rules->isUnique(['email']), '_isUnique', [ 'errorField' => 'email', 'message' => __d('CakeDC/Users', 'Email already exists') ]); } return $rules; } |
CakePHP3のCakeDC/Usersの関連記事
CakePHP3の CakeDC/Usersを使うために、基本となるインストールの方法から入力画面のテンプレートのカスタマイズや、リダイレクトの設定など、CakeDC/Usersに関する記事を下記に書いています。
あわせて参考にしてみてください。
CakePHP3のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説・3.6以降対応
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説
CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ
Google reCAPTCHAのSite key、Secret keyの取得方法・20170408バージョン
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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP3でシェルを作成しコマンドラインから実行・CakePHP2との違い
CakePHP3のシェルスクリプトを作成し、コマンドラインから実行する方法を解説。複数単語をつなげる場合の対応方法がCakePHP2より制限が厳しくなったのでCakePHP3の命名規則の確認が必要だ。
-
-
CakePHP5でヘルパーから他のヘルパーを読み込む方法・CakePHP4からの変更点
CakePHP5のヘルパーで他のヘルパーを読み込む方法を解説。公式の日本語CookbookはCakePHP4のソースのままで間違っているため注意が必要。CakePHP4からの移行の際も同じ点に注意が必要。
-
-
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。
-
-
CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
-
CakePHP3にWYSIWYGエディタのCKEditor4を設置、カスタマイズ方法を解説
WYSIWYGエディタであるCKEditor4をCDNを利用して簡単にCakePHP3に導入する方法とカスタマイズする方法を解説。CakePHP3にはページごとの振り分けを行うブロック化を利用する。
-
-
CakePHP3のアソシエーション機能を使い関連レコードをまとめて削除
CakePHP3でレコードを削除する際に関連するレコードをまとめて削除する機能の解説。フレームワークのメリットを存分に発揮し、コマンドを1行追加するだけで実装可能。
-
-
CakePHP3でデータを保存する save()で発生するエラーを確認する方法を解説
CakePHP3でデータ保存処理のログを取得する方法。save()では true、falseの戻り値しか取得できないが、saveOrFail()と try…catch文を使いエラーログ、エンティティを取得し、不具合の解析を行う。
-
-
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
responseの値を指定する方法は3系では「body」だが、4系では「withStringBody」になりる。加えてJSON形式なら「withType」で指定するなど4系では結構異なる処理がある。
-
-
CakePHP4で公開側と管理側のデザインテンプレートを分ける方法・setLayout()
CakePHP4でデフォルトのレイアウトファイル「default.php」は管理側に使用し、これとは別のデザインを公開側のページに設定したい、を実装する方法を解説。
-
-
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する
VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。