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





この記事が気に入ったらサポートをしてみませんか?