Kohanaの基本動作覚書
HMVC:モジュールの作り方
前のリンク、イベントとフックを理解するでちょっと書いたけれど、Kohanaはモジュール・ディレクトリだけでアプリケーションの作成が出来るようになっている。この機能をLayered MVC -- HMVCというらしい[1]。
CI標準にはない実装だと思うが、CIの現行版を調べてないので、これは(も)無責任に書いている[2]。
ただし、「モジュール」部で扱えないKohanaのファイルはもちろん存在する。次の二種類がそれであるので注意。
module化できない例外
kohanaのapplication/config/config.php kohanaのsystem/core/以下のファイル
さて、モジュール作成で必要な準備は
モジュールを利用可能にする
kohanaのapplication/config/config.php
の中の
$config['modules'] = array
(
MODPATH.'モジュール名'
);
を設定して、同名のディレクトリをmodulesディレクトリの下に作るだけだ。
そこにあるようにmodulesディレクトリじゃなくても、MODEPATH 定数を使わなければ、モジュールはどこにあってもいいみたいだけど、話がややこしくなるので、ここではmoduels/モジュール名として説明を続ける。
さて、モジュール内のディレクトリ配置はapplicationディレクトリと相似形である。
モジュールのディレクトリ構成
modules/モジュール名/config/ modules/モジュール名/controllers/ modules/モジュール名/libraries/ 以下略
のように。
ドキュメント=http://docs.kohanaphp.com/general/filesystemによれば、同名ファイルが、application>modules>systemの優先順で[ある・ない]が判定され、最大公約数的に選択結合(merge)されるとのことである[3]。もちろん上に書いた2種類の例外を(config.phpとsystem/core)を除く。
したがって、applicationになにも置かなければ、modulesのファイルが、systemのものよりも優先されて利用される、ということになる。
ただし、繰り返しになるが、config/config.php ファイルはモジュールディレクトリには置けない。そもそもモジュールを使うかどうかの情報が、モジュール<外>で設定される必要があるからだ。つまりは、最初の一撃google は<外部>にある、とポストモダン風に言ってみる。
以上要するに、Kohanaの全体的な作られ方を「モジュール」という言葉を使って説明しなおせば、「標準のapplicationとsystemディレクトリ(自身)が、ハードコード化されたモジュールと考えることが出来る[4]」わけなのだ。