モジュールとモジュラー、およびモジュールグループ

lmd には、「モジュール」「モジュラー」「モジュールグループ 」という概念があります。
モジュールに関しては、先の章で簡単に触れましたが、ここではより詳しく説明します。

【1】 http://example.com/module/func1/
【2】 http://example.com/module/func1/func2/

モジュール


例えば、上記【1】【2】のURLに対応するモジュールは、次の構成になります。

/path/to/Lambda/apps/<APP_DIR>/module/

【1】【2】で実行されるモジュールをそれぞれ「module.func1 モジュール」「module.func1.func2 モジュール」と言います。

- 重要 -


モジュールとURLの対応関係

ファイル名のサフィックスである .{logic|prep|view}.php を取り除き、. (ドット) を / (スラッシュ) に置き換えたものが、URLに対応します。

URL

http://example.com/module/f1/f2/f3

上記URLに対応するモジュール (module.f1.f2.f3 モジュール)

Lambda/apps/<APP_DIR>/module/f1.f2.f3.logic.php
Lambda/apps/<APP_DIR>/module/f1.f2.f3.prep.php
Lambda/apps/<APP_DIR>/module/f1.f2.f3.view.php

<APP_DIR> のディレクトリ名は、好きな名前を付けて運用します。(複数のアプリケーション運用を考慮しています)

設定により、ダミー拡張子を定義することも可能です。
ダミー拡張子「.html」を定義した場合、下記URLにも対応します。

http://example.com/module/f1/f2/f3.html

 

省略時のモジュール (第二階層目の省略)

下記のように、第二階層目を省略したURLには、ファイル名プレフィクスを index とした、index.{logic|prep|view}.php が対応します。

URL

http://example.com/module/

上記URLに対応するモジュール (module.index モジュール)

Lambda/apps/<APP_DIR>/module/index.logic.php
Lambda/apps/<APP_DIR>/module/index.prep.php
Lambda/apps/<APP_DIR>/module/index.view.php

下記URLでもアクセス可能です。

http://example.com/module/index

 

省略時のモジュール (第一階層目の省略)

下記のように、第一階層目を省略したURLには、index/index.{logic|prep|view}.php が対応します。

URL

http://example.com/

上記URLに対応するモジュール (index.index モジュール)

Lambda/apps/<APP_DIR>/index/index.logic.php
Lambda/apps/<APP_DIR>/index/index.prep.php
Lambda/apps/<APP_DIR>/index/index.view.php

※ index モジュールグループ(後述)は、lmd で予約されています。

 

モジュール名の命名規約

モジュール名に . (ドット) を含む名前を付けることはできません。また、- (ハイフン) などの“記号”を含めることもできません。

クエリーストリング以外で“記号”を含む URL にアクセスすると、400エラー(Bad Request) を返し、400モジュールが実行されます。(設定により、 .html 等の拡張子を付けることは可能です)

※ PHP の変数名に利用できる文字列 [a-zA-Z0-9_] と覚えておくと良いでしょう。


 

 

なお、モジュールには「メインモジュール」と「サブモジュール」という概念もあります。

メインモジュール

【1】のメインモジュールは「module.func1」であり、【2】のメインモジュールは「module.func1.func2」です。
リクエストされた URL に対応する、最初に呼び出されるモジュールがメインモジュールです。

サブモジュール

メインモジュールの中で、さらに別のモジュールを呼び出すことができますが、これをサブモジュールと言います。
※ サブモジュールの中でさらにサブモジュールを呼び出すことも可能です。(モジュールのネスト)

▼具体例
WEBアプリケーションは、ブラウザに対してWEBページのHTMLを返すことが主な仕事になります。
WEBページは大抵の場合、ヘッダー部・コンテンツ部・フッター部の3つのパーツに分離できます。
サイトに統一性を持たせる意味で、ヘッダー部とフッター部はどのページでも共通にするケースがほとんどでしょう。
そこで、lmd のビューでは、下記のようにヘッダー部とフッター部をモジュール化して使いまわす手法が一般的です。

1
2
3
4
5
<?php $lmd->invokeModule('common.head') ?>
    :
コンテンツ部のHTMLソース
    :
<?php $lmd->invokeModule('common.foot') ?>

invokeModuleメソッドで呼び出されるモジュールをサブモジュールと言います。

モジュラー


モジュラーは、モジュールを構成する3つのファイルを示します。

具体的には、

  • func1.logic.php は「module.func1 のロジックモジュラー」
  • func1.prep.php は「module.func1 のプレップモジュラー」
  • func2.view.php は「module.func2 のビューモジュラー」

と表現します。

モジュールグループ


【1】および【2】のモジュールグループは module になります。

例えば、ログインが必要な会員専用エリアを実装するとします。
会員専用エリアの URL を http://example.com/member/ 配下と設計し、「member モジュールグループ」を作ります。

こうしておけば、「member モジュールグループ」へのリクエストを lmd がフック(*1)して、ログイン状態によるアクセスの許可/拒否が簡単に実装できるようになります。
モジュールグループは常に第一階層目を指すことを覚えておいてください。

(*1) モジュールが実行される前に、app.init.php にて初動動作を定義できます。(後述)

予約済みのモジュールグループ

以下のモジュールグループは lmd で予約されています。

  • index モジュールグループ
  • 400 モジュールグループ
  • 404 モジュールグループ

index モジュールグループ

index モジュールグループは、デフォルトのモジュールグループです。
http://example.com/ のように、モジュールが指定されないリクエストに対応します。

400 モジュールグループ (Bad Request)

不正なリクエストに対応します。

404 モジュールグループ (Not Found)

ページが存在しないリクエストに対応します。