LPV (Logic-Prep-View)

lmd は、LPV で駆動します。

LPV


LPV とは、リクエストに対する一連の処理を

Logic(ロジック) → Prep(プレップ) → View(ビュー)

上記の順に実行する処理フローの方式です。
LPV の各ステップでは、対応する php スクリプトが呼ばれ、順に実行されていきます。

LPV: Logic-Prep-View

Logic: ロジック


  • ファイルの命名規則: *.logic.php
  • 役割:値の抽出と加工

MVC の モデル(Model)に相当し、ビジネスロジックを実行したり、DB の CRUD プロセスを呼び出したりします。

なお、ロジック内では、<HTML>タグの記述を一切禁止します。
<HTML>タグは、後述するビューやプレップに記述してください。
このルールは、ロジックとビュー(デザイン)を完全に分離するための規約です。

※ロジックが不要な場合は、ロジックファイルは無くても構いません。

Prep: プレップ


  • ファイルの命名規則: *.prep.php
  • 役割:値の整形

後述するビューの前処理をここで行います。プレップは不要な場合が多く、あまり出番がないかもしれません。
使いどころとしては、例えば、「パンくずリスト」を実装する場合などに活躍します。
「パンくずリスト」はリクエストされたURLによって様々に表示内容が変化します。
言い換えれば、実装上は if/else や switch 等の条件分岐を駆使してコーディングされるはずです。
この時、複雑に入り組んだ if/else や switch のプログラムコードをビューに記述したくありません。
(ビューは表示を司るレイヤーなので、表示に関すること以外は実装すべきでないからです)
そこで、前処理としてプレップ内で必要なコードを実装し、実行結果だけをビューに渡すのがスマートなやり方です。

[NOTE]
ビューに渡す値で、どうしてもPHPコードとHTMLタグを混在して記述する必要がある場合は、このレイヤー(プレップ)で実装することが推奨されます。

※プレップが不要な場合は、プレップファイルは無くても構いません。

View: ビュー


  • ファイルの命名規則: *.view.php
  • 役割:表示

MVC の ビュー(View)と同じ役割です。
ブラウザに出力する HTML やその他のアウトプットを記述します。

※ビューが不要な場合は、ビューファイルは無くても構いません。

なお、lmd ではテンプレートエンジンの利用を推奨しません。
ビュー内での条件分岐や反復処理は、次のように可読性の良い PHP ネイティブ の書き方を推奨します。

条件分岐

1
2
3
4
5
6
7
<?php if($cond): ?>

<?php elseif($cond2): ?>

<?php else: ?>

<?php endif; ?>

反復処理

1
2
3
<?php foreach($arr as $k => $v): ?>

<?php endforeach; ?>

 

ビューでは、サブモジュール(*1)として、さらにモジュールを呼び出すことができます。
下記は、common.foot モジュールを呼び出している例です。
サブモジュールの呼び出しには $lmd->invokeModuleメソッドを使います。

1
2
3
<?php
$lmd->invokeModule('common.foot');
?>

(*1) モジュールの中で呼び出されるモジュール

 

モジュール


*.logic.php
*.prep.php
*.view.php

lmd では、logic/prep/view を1グループにまとめ、ひとつの実行単位として「モジュール」と呼びます。

なお、モジュールは、logic/prep/view の3つが必ずしも必要ではありません。
どれか1つあれば成立します。
しかし1つもない状態で呼び出すとエラーになります。