エス技研

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


CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説

      2023/12/28

CakeDC/Usersの Usersテーブルへの接続、バリデーションのカスタマイズ方法解説

 
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説」の記事で、CakePHP4で CakeDC/Usersを使ってログイン認証機能を実装する手順を解説しました。
また、「CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説」の記事で、HTMLのテンプレートを変更する解説をしました。
 
今回の記事では、その時に解説できなかった、入力画面でのバリデーションのカスタマイズ方法について解説します。
 
 
また、CakeDC/Usersをインストールすると、CakeDC/Usersで使用する Usersテーブルの Modelは「/vendor/cakedc/users/src/Model/Table/UsersTable.php」に作成されます。
 
ですが、このままではアソシエーション(モデルの結合)ができません。
 
例えば、ユーザの詳細情報を「user_details」というテーブルに生成し、「users」テーブルと結合しようと思っても「Table class for alias Users could not be found.」と言うエラーが発生します。
 
このエラーを解消し、アソシエーション(モデルの結合)をする方法を解説します。
 
 

CakeDC/Usersのバリデーションが記載されているファイル

 
CakeDC/Usersのバリデーションが記載されているファイルは、以下のファイルになります。
 /vendor/cakedc/users/src/Model/Table/UsersTable.php
 
このファイルに記述されているバリデーションの内容を変更することで、バリデーションのカスタマイズを行うことは可能です。
 
ですが、一般的にはこのファイルはプラグイン「CakeDC/Users」のコアファイルになりますので、このファイルを直接更新することはせず、オーバーライドする処理を構築します。
 
 

CakeDC/Usersのバリデーションをオーバーライドでカスタマイズする

 

1./src/Application.phpの編集

 
下記のファイルに編集を行います。
 /src/Application.php
 
下記の、configファイルとして「/config/users.php」を利用する処理を記述します。

 
すでに Usersプラグインのロード処理を記述(2行目)している場合は、5行目のみ追記します。
 
これは、「CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説」の記事で、リダイレクトの処理の設定をする際にも記述しますので、リダイレクトなどほかの設定ですでに記述している場合もあるかと思います。
 
 

2.users.phpの編集

 
下記のファイルに編集を行います。該当のファイルがない場合は、新規作成をします。
/config/users.php
 
下記の値を編集します。

 
 
標準設定は、「/vendor/cakedc/users/config/users.php」に下記の様に記載されています。

 
「/config/users.php」は、「CakePHP3のCakeDC/UsersのUserHelperでログアウトやreCAPTCHAをカスタマイズ」で解説をした reCAPTCHAでも利用しますので、すでに設定がある場合もあるでしょう。
 
 

3.Model/Entity/User.phpの編集

 
下記のファイルに編集を行います。該当のファイルがない場合は、新規作成をします。
/src/Model/Entity/User.php
 
下記の処理を編集します。

 
この内容は、プラグインの Entity「/vendor/cakedc/users/src/Model/Entity/User.php」の内容を流用しています。
 
 

4.Model/Table/UsersTable.phpの編集

 
下記のファイルに編集を行います。該当のファイルがない場合は、新規作成をします。
/src/Model/Table/UsersTable.php
 
そして、ようやく、バリデーションの処理を記載します。

 
17行目以降の「validationDefault()」の内容は、下記のプラグインの標準設定の内容をコピペしてからカスタマイズしています。
 /vendor/cakedc/users/src/Model/Table/UsersTable.php
 
上記の例では、32行目の処理で、「first_name」を必須項目にする、という処理に変更してみています。
 
 
これで、プラグインのファイルを触らずに、バリデーションをカスタマイズすることができるようになります。
 
 

既存のバリデーションの英語のメッセージを日本語化する

 
/vendor/cakedc/users/src/Model/Table/UsersTable.php
の「public function buildRules(RulesChecker $rules): RulesChecker」には
「パスワード」と「パスワード確認用」の入力値が同じかどうかチェック
「ユーザ名」「メールアドレス」がすでに使用されていないかどうかチェック
のバリデーションも含まれています。
 
これもバリデーションとして使われていますが、エラーのときのメッセージが英語で表示されます。
 
 
この英語のメッセージを変更する方法の一つとして、
/src/Model/Table/UsersTable.php
に、下記の関数部分のソースコードをコピペして、エラーメッセージ部分の「Username already exists」を日本語に変えることで対応することができます。
 

 
 
CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
また、上記の記事では、CakePHP4全体のメッセージを日本語化する方法について記載をしています。
あわせて参考にしてください。
 
 

Usersテーブルへの接続方法

 
今回のこの記事の「2.users.phpの編集」から「4.Model/Table/UsersTable.phpの編集」の対応を行うことで、
 /src/Model/Entity/User.php
 /src/Model/Table/UsersTable.php
のファイルを使う設定、および、それぞれのファイルの作成を行いました。
 
これによって、Usersテーブルをアソシエーション(モデルの結合)して使うことができる様になります。
 
 
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説のエラー画面
 
この設定がないと、上記の画面のようにエラーとなります。
Table class for alias Users could not be found.
Cake\ORM\Exception\MissingTableClassException
 
このエラーが発生したときは、「/src/Model/Entity/User.php」「/src/Model/Table/UsersTable.php」を使える様にするために、「2番」から「4番」の対応を行ってください。
 
 

CakePHP4のCakeDC/Usersの関連記事

 
CakePHP4の CakeDC/Usersを使うために、基本となるインストールの方法から入力画面のテンプレートのカスタマイズや、リダイレクトの設定など、CakeDC/Usersに関する記事を下記に書いています。
あわせて参考にしてみてください。
 
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP4のCakeDC/Usersのログイン時のリダイレクトとユーザ権限管理の設定解説
 
 

CakePHP4の関連記事

CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
 
その他の「CakePHP4」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする

CakePHP4、CakePHP3でブラウザにキャッシュさせる設定の解説。CSS、JavaScript、画像をブラウザにキャッシュさせるのか、定期的にリロードする設定にするのかの設定が可能。

CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説

responseの値を指定する方法は3系では「body」だが、4系では「withStringBody」になりる。加えてJSON形式なら「withType」で指定するなど4系では結構異なる処理がある。

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

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

CakePHP4で公開側と管理側のデザインテンプレートを分ける方法・setLayout()
CakePHP4で公開側と管理側のデザインテンプレートを分ける方法・setLayout()

CakePHP4でデフォルトのレイアウトファイル「default.php」は管理側に使用し、これとは別のデザインを公開側のページに設定したい、を実装する方法を解説。

CakePHP3でレコードを追加、更新(Insert、Update)する複数の方法を紹介
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介

CakePHP3でレコードを追加、更新(Insert、Update)する記述方法を解説。1件ずつ処理、全件をまとめて処理、条件に該当する複数件のレコードを処理方法をサンプルコードを用いて解説。

CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。

CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合

アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。

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

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

CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説

CakePHP4でバッチ処理を行うためのコマンド・シェルの実装方法について解説。bakeでテンプレートファイルを作成し、「execute()」に処理を記述する方法を解説。

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

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