home>>PHP FW Kohanaを使う>>Kohanaの基本動作覚書

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]」わけなのだ。

kohanamodules.png













annex

補足情報はありません













note
[2] その後少しだけ調べた(20090711)。CIでは、サードパーティの拡張ライブラリで実現するようになっているらしい cf. Notes on Choosing a PHP Framework: A Quick Comparison of CodeIgniter and Kohanaの表参照。 Matchboxとか。・・・って、これもちゃんと調べていないので間違っていたらごめんなさい。
[3] これに対して、同名ファイルの中に書かれている変数が順に上書きoverrideされるのものが、2つある。 一つは、各種configファイルの設定で、今一つは言語ファイル(i18n)にある設定。