HMVCとは、モジュール化してMVC要素のグループを独立させる方法。
複数のモジュールを作ることができるため、大規模な開発でも管理しやすくなります。
コントローラロジックの再利用にも優れており、私はよくこれを用いて開発を行います。
└─ app
├── classes
│ ├── controller
│ ├── model
│ └── view
└── views
通常のMVCですね。
FuelPHPでは、classes/viewの中にビューモデルファイルを置くことができるのも魅力的。
└─ app
├── classes
│ ├── controller
│ ├── model
│ └── view
├── views
└── modules
└── admin(モジュール名:任意)
├── classes
│ ├── controller
│ └── view
└── views
modulesディレクトリの配下には、複数のモジュールを置くことができます。
各モジュールにアクセスするためのURLは、
http://[ドメイン]/[モジュール名]/[コントローラ名]/[アクション名]
となります。
Modules化して、コントローラー・ビューモデル・ビューを分割します。
今回はモデルは分割せず、全てのモジュールで共通のモデルを使用することにします。
モデルも分割したい場合は、コントローラー等と同様にmodulesディレクトリ以下に配置するだけです。
modules内に任意のディレクトリを作成し、通常のclassesやviewをコピーして配置します。
└── modules
└── admin(モジュール名:任意)
├── classes
│ ├── controller
│ └── view
└── views
app/config/config.php ファイルでmodules_pathを設定します。
'module_paths' => array(
APPPATH.'modules'.DS
),
名前衝突を避けるために、modules内のコントローラー(モデル)にnamespaceを記述します。
名前空間はモジュールフォルダ名と同一とする必要があります。
namespace Admin;
class Controller_Index
{
modules内のファイルからクラスを使用する場合、¥を先頭につけます。
//$name = Input::get('name');
$name = \Input::get('name');