CodeIgniter4のモジュール(HMVC)①
この記事は CodeIgniter Advent Calendar 2022 - Qiita の14日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。
モジュールとは?
CodeIgniter4のモジュールとは、コードをモジュール化する仕組みです。
1つのモジュールの中に関連するMVCファイルや設定ファイル、ヘルパー、言語ファイルなどをまとめることができます。 モジュールは小さなアプリと考えることができます。
├── app/
│ ├── Config/
│ ├── Controllers/
│ ├── Database/
│ ├── Filters/
│ ├── Helpers/
│ ├── Language/
│ ├── Libraries/
│ ├── Models/
│ └── Views/
└── modules/Blog/src/
├── Commands/
├── Config/
├── Controllers/
├── Database/
├── Filters/
├── Language/
├── Models/
└── Views/
なお、HMVCという言葉を使っていないのは、HMVCの定義が人によって異なるためだと思われます。
CodeIgniter4のモジュールは、CodeIgniter3で有名だった wiredesignz のHMVCとは異なるものです。
Homeモジュールを作成してみる
とりあえず、実際にモジュールを作成してみましょう。
デフォルトの Home コントローラをモジュール化してみます。
フォルダの作成
modules/Home/src
フォルダを作成します。
その中に Config
、Controllers
、Views
フォルダを作成してください。
modules/
└── Home/
└── src/
├── Config/
├── Controllers/
└── Views/
ここでは、将来、tests
フォルダをこのモジュールに含めることを見越して、ソースファイルは src
フォルダの中に配置することにします。
オートローダーの設定
PSR-4の名前空間 Home
を追加します。
app/Config/Autoload.php
public $psr4 = [
APP_NAMESPACE => APPPATH, // For custom app namespace
'Config' => APPPATH . 'Config',
'Home' => ROOTPATH . 'modules/Home/src', // ← 追加する
];
sparkコマンドで設定を確認しておきましょう。
$ php spark namespaces
CodeIgniter v4.2.10 Command Line Tool - Server Time: 2022-12-12 23:08:22 UTC-06:00
+-------------+------------------------------------------------------------+--------+
| Namespace | Path | Found? |
+-------------+------------------------------------------------------------+--------+
| CodeIgniter | /.../ci4-modules-test/vendor/codeigniter4/framework/system | Yes |
| App | /.../ci4-modules-test/app | Yes |
| Config | /.../ci4-modules-test/app/Config | Yes |
| Home | /.../ci4-modules-test/modules/Home/src | Yes |
+-------------+------------------------------------------------------------+--------+
名前空間 Home
が正しく追加されています。
コントローラ
app/Controllers/Home.php
を modules/Home/src/Controllers/Home.php
に移動して、
名前空間を変更します。
<?php
namespace Home\Controllers;
use App\Controllers\BaseController;
class Home extends BaseController
{
public function index()
{
return view('Home\Views\welcome_message');
}
}
ビューファイルは Home\Views
名前空間に移動するため、パスを変更しておきます。
ルーティング設定
app/Config/Routes.php
にある既存のルートを削除しておきます。
--- a/app/Config/Routes.php
+++ b/app/Config/Routes.php
@@ -33,10 +33,6 @@ $routes->set404Override();
* --------------------------------------------------------------------
*/
-// We get a performance increase by specifying the default
-// route since we don't have to scan directories.
-$routes->get('/', 'Home::index');
-
/*
* --------------------------------------------------------------------
* Additional Routing
モジュールの中にルート設定ファイルを追加して /
へのルートを設定します。
modules/Home/src/Config/Routes.php
<?php
namespace Home\Config;
$routes->get('/', [\Home\Controllers\Home::class, 'index']);
ビュー
app/Views/welcome_message.php
を modules/Home/src/Views/welcome_message.php
に移動します。
これで、Homeモジュールが完成しました。
modules/
└── Home/
└── src/
├── Config/
│ └── Routes.php
├── Controllers/
│ └── Home.php
└── Views/
└── welcome_message.php
Homeモジュールの動作確認
sparkコマンドでルーティング設定を確認しておきましょう。
$ php spark routes
CodeIgniter v4.2.10 Command Line Tool - Server Time: 2022-12-12 22:59:15 UTC-06:00
+--------+--------+------------------------------------------+----------------+---------------+
| Method | Route | Handler | Before Filters | After Filters |
+--------+--------+------------------------------------------+----------------+---------------+
| GET | / | \Home\Controllers\Home::index | | toolbar |
| CLI | ci(.*) | \CodeIgniter\CLI\CommandRunner::index/$1 | | |
+--------+--------+------------------------------------------+----------------+---------------+
きちんと、Homeモジュールの中のコントローラになっています。
php spark serve
を実行し、http://localhost:8080/ にアクセスすれば、CodeIgniterのWelcomeページが表示されます。
「CodeIgniter4のモジュール(HMVC)②」へ続く。
この記事は CodeIgniter Advent Calendar 2022 - Qiita の14日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。
参考
Date: 2022/12/14