2024こそLaravelじゃなくてCakePHP4で爆速開発! 参考リンク(認証、AdminLTE、検索)
2023年末にバージョン5系が出たCakePHP。
Laravelに比べ動作が若干早い。主要レンタルサーバーでもデプロイでつまづきにくいのでVPSも不要。初心者にもやさしい。
開発も標準Bakeコマンドだけで動く画面がイッパツ生成。ほんとに爆速。管理画面のテンプレートをはじめ認証や検索などの主要機能も公式メンバーの作成したプラグインですぐに導入可能。
複雑なデータ操作やぬるぬる動くフロントが不要な「業務管理系のアプリ」ならこれで十分! ぬるぬる動かしたければフロントだけ別フレームワーク使えば問題なし。
Laravelのアプデ速度が速すぎて、実務利用に躊躇しているそこのアナタ。今だからこそバージョン固定しやすいCakePHP4で業務アプリを作りましょう。
記事作成時の環境
php 8.0
本体バージョン cakephp 4.5.2
認証プラグイン CakeDC/users 11.3.4
検索プラグイン FriendsOfCake/search 6.2.5
AdminLTEプラグイン arodu/cakelte 1.1.1
ローカル環境構築
XAMPP + composer
XAMPPで複数バージョンのPHPをバッチファイルで複数共存させる
MAMP + composer
MAMPでPHPバージョン切り替え
・PHPのフォルダ名変更してMAMP管理パネルで変更
・ただしcomposerを使う際のphpバージョンはphpへのpathを書き換えるか、使用中のphp実行ファイルを直接指定する
Cakephp4インストール
本体インストール
#バージョン4系をcmsというディレクトリを作成してインストール
composer create-project --prefer-dist cakephp/app:4.* cms
#または下記
php composer.phar create-project --prefer-dist cakephp/app:4.* cms
#カレントディレクトリに配置する場合はドット「.」
composer create-project --prefer-dist cakephp/app:4.* .
#安定稼働していたバージョン4.4系に固定(4系は4.5系まである)
composer create-project --prefer-dist cakephp/app:4.4.* .
インストール時のよくあるエラー
4.4系のインストール時に発生していたデバッグキット読み込みエラー解消
// インストールディレクトリ/config/bootstrap.php
// 94行目付近
/*
* When debug = true the metadata cache should only last
* for a short time.
*/
if (Configure::read('debug')) {
Configure::write('Cache._cake_model_.duration', '+2 minutes');
Configure::write('Cache._cake_core_.duration', '+2 minutes');
// disable router cache during development
Configure::write('Cache._cake_routes_.duration', '+2 seconds');
//◆以下2行を追加
Configure::write('DebugKit.panels', ['DebugKit.Packages' => true]);
Configure::write('DebugKit.safeTld', ['com','jp']);
}
最初から4系最新版の「4.*」でインストールしてエラーが多発した場合は、1つ前の「4.4.*」でいったんインストールして上記デバッグキットの読み込みエラーを解消してから、composer.json を「4.4.*」から「4.5.* 」に変更して composer update すると上手くいきました。
2023年12月末時点(最新は5.0.3)で、4系の最新は 4.5.2 になっています。
初期設定
アプリケーション設定
config/app.phpに 以下設定
1、'APP' 部
・defaultLocale → ja_JP
・defaultTimezone → Asia/Tokyo
2、Datasources => default 部
・encoding → コメントアウト外してutf8mb4 有効にする
'App' => [
'namespace' => 'App',
'encoding' => env('APP_ENCODING', 'UTF-8'),
//◆書き換え◆
//'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US'),
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'ja_JP'),
//◆書き換え◆
//'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'UTC'),
'defaultTimezone' => env('APP_DEFAULT_TIMEZONE', 'Asia/Tokyo'),
//以下略
],
'Datasources' => [
'default' => [
'className' => Connection::class,
'driver' => Mysql::class,
'persistent' => false,
'timezone' => 'UTC',
//◆コメントアウトを外す◆
'encoding' => 'utf8mb4',
データベース接続設定
config/app_local.php に下記を記入
Datasources>default
・username → 自分のDB設定
・password → 自分のDB設定
・database → 自分のDB設定
// \config\app_local.php
'Datasources' => [
'default' => [
'host' => 'localhost',
//'port' => 'non_standard_port_number',
// ◆3行変更◆
'username' => 'my_user_name',
'password' => '123456',
'database' => 'may_cake4_db',
],
],
公式には config/app.php にDB接続設定を記載する例がありますが、実務ではDB設定は開発環境と本番環境で分ける事が多いです。
そこで、config/app.php の内容を環境に合わせて上書きできる config/app_local.php にDB設定を記載します。
また、.gitignore に config/app_local.php を追記して、開発・本番それぞれ独立したコードを維持できるようにします。
Cakeコマンド確認
windowsの場合、cakeコマンドは、/bin に含まれるcake.bat を起動して、そのままcake.phpを起動ている。バージョン表示で動作確認しておく。
※ディレクトリの区切り記号がコマンドプロンプトとPowershellで異なる。
・コマンドプロンプト「 \ 」
(windowsは¥円マーク表示になる)
# bin\cake version
・ターミナルやパワーシェル 「 / 」
$ bin/cake version
phpのパスが通っているので下記もOK
$ php bin/cake.php version
ログイン・認証関連の実装
ログインとログアウトはCakePHP3まではAuthComponentで実装していましたが、CakePHP4からAuthComponentが非推奨となり「authentication」プラグインを使用して実装とのこと。
CakeDC/Usersで実装する場合
テーブル作成など全部まとめてやってくれる定番プラグインです。
エス技研様の記事に詳しくやり方が載ってます。
1)プラグインインストール
$ composer require cakedc/users
バージョン指定する場合
$ composer require cakedc/users:11.1
$ composer require cakedc/users:11.*
2)読み込み設定 /src/Application.php
66行目あたり // Load more plugins here の下へ追記
$this->addPlugin(\CakeDC\Users\Plugin::class);
// /src/Application.php に追記する
public function bootstrap(): void
{
/*
* Only try to load DebugKit in development mode
* Debug Kit should not be installed on a production system
*/
if (Configure::read('debug')) {
$this->addPlugin('DebugKit');
}
// Load more plugins here
// ◆追記◆
$this->addPlugin(\CakeDC\Users\Plugin::class);
}
3)テーブル自動作成
$ bin\cake migrations migrate -p CakeDC/Users
または(phpとして実行)
$ php bin/cake.php migrations migrate -p CakeDC/Users
4)管理権限ユーザを作成
$ bin\cake users add_superuser -u ログインID -p パスワード
または(phpとして実行)
$ php bin/cake.php users add_superuser -u ログインID -p パスワード
例
$ bin\cake users add_superuser -u superadmin -p pass1234
5)ログイン画面にブラウザからアクセス
http://localhost/アプリケーション名/users/login
6)CakeDC/Usersを使った場合に他テーブルと連結してBakeする
※これを行わないとbakeしてもUserIDが使えない
こちらも参考になります。
自前で authentication で実装する場合
公式の「authentication」プラグインを自前で実装する場合
・こちらはコードをある程度自分で書きます。
# 公式からインストール
$ php composer.phar require "cakephp/authentication:^2.0"
#こちらでもよい
$ composer require "cakephp/authentication:^2.0"
PHPのバージョンが高かったり低かったりでつまづくかもしれません。
・cakephp本体 4.5.2
・cakephp/authentication 2.10.2
→PHP 8.2以上でないとダメでした。
authenticationプラグインでの実装例 記事
会員側・管理者側の2種認証の例
AdminLTE テーマ適用
管理画面テーマの定番AdminLTEを導入します。
必要なところだけ自分で頑張って導入するか、簡単に済ませたいならプラグインの arodu/cakelte を使います。
adodu/CakeLTE プラグイン(お勧め)
・AdminLTE3.2.0が適応される
・ファイル構造がシンプルでカスタマイズしやすい
・cakephp4.5系でもエラー起きない
CakeLTEの導入・カスタマイズ記事
maiconpinto版 プラグイン
・githubで一番Starが多く公式ドキュメントが充実
・ただしmaster版はcakephp4.0.0までしか正式対応していない
・v2.0.3でcakephp4.4.*まで対応
・CakePHP4.5.2でbakeするとtemplete適用でtwigエラーが出る
https://github.com/maiconpinto/cakephp-adminlte-theme
その他のAdminLTEプラグイン
https://github.com/ahmed3bead/cakephp-4-lte
https://github.com/chcnetconsulting/AdminLTE
自前でAdminLTEを導入
https://specially198.com/apply-adminlte-to-cakephp4/
検索プラグイン導入
検索を実装するのは面倒なのでプラグインを使います。
FriendsOfCake/search (お勧め)
・日本語の情報が多いので調べやすい
・更新も早くもCakePHP5系まで対応
・バージョンマップで4系・3系にも使いやすい。
CakeDC/search (アーカイブ)
こちらも有名どころですが、2023年12月でアーカイブされた模様
今後は上記のFriendsOfCake/Searchを使います。
https://github.com/CakeDC/search
導入記事
https://www.webopixel.net/cakephp/300.html
https://kanonji.hatenadiary.com/entry/20101208/1291819950
開発の基本Tips
複雑なデータ保存
CheckBox複数選択をカンマ区切り保存
リクエストデータの書き換え
https://blog.masuyoshi.com/cakephp2-to-4-request-data-set/
https://kazinchu.com/note/1323/
https://qiita.com/egcmrsk/items/5312e81a366c6a6a8209#%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%92%E3%82%BB%E3%83%83%E3%83%88
cakephp3初期はこの方法でした
https://www.84kure.com/blog/2015/02/25/cakephp-%E3%82%AB%E3%83%B3%E3%83%9E%E5%8C%BA%E5%88%87%E3%82%8A%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E8%A4%87%E6%95%B0%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%8B/
配列をJSON変換して保存
JSON型の文字化け防止、独自型の作成
CakePHP記事が多いブログ等
有限会社 エス技研
https://blog.s-giken.net/category/cakephp-2-x
自由考学
https://katotaks.com/category/webdev/cakephp/
コードサプリ
「CakePHP」カテゴリの関連記事一覧|コードサプリ (codesapuri.com)
Qiita
https://qiita.com/tags/cakephp4