イベント駆動型PHPフレームワークを作る その17

Simgは既定のフォルダーやファイルを多く作成する。
世に有名な「Hello,worldプロジェクト」でさえも以下のような構成が必要だ。

Hello,worldプロジェクト

これは面倒である。
生産性向上が至上命令の我々に、たかが「Hello,world」一本で、この作り込みは厳しい。やはりSimgプロジェクトは再利用すべきだ。

というわけでSimgに再利用機能を追加した。
これを学術風に「オーバーロード機能」と呼ぶことにする。

サンプルプロジェクトのhellosimgをオーバーロード(再利用)するovl-hellosimgプロジェクトを作成してみよう。
プロジェクト構成は以下となる。

Hello,world再利用プロジェクト

実にシンプルである。
久々に「Simple is great!」と言いたい。

さて、オーバーロードの仕組みとして以下の規約を設けた。

  1. 設定ファイルは上位プロジェクト優先で合成
  2. phpファイルは上位プロジェクト優先で上書き
  3. マジックメソッドによるSimg仕様オーバーロード

「マジックメソッドによるSimg仕様オーバーロード」は次回に譲るとして、残り2つを説明する。

まずプロジェクトの上位、下位だが、利用されるプロジェクトが下位で、利用する方が上位と考える。例では「ovl-hellosimgプロジェクト」が上位、「hellosimgプロジェクト」が下位だ。

設定ファイルはconfigやview/rsourceで作成するエントリー・キー・値から構成されるお馴染みのファイルだ。上位プロジェクトで下位プロジェクトの値を変更したい場合は、同一構成のフォルダーに同名のファイルを作成し、キー値を変更すれば良い。phpファイルもロジックを変更したいファイルと同一構成のフォルダーに同名のファイルを作れば、下位のphpと置き換えることができる。Action、Pager、Porter及びRenderは上位プロジェクトでも追加でき、動作変更も可能だ。

さて、「Hello,worldプロジェクト」を思い出してほしい。
localhostで「なせば成る」、localhost?_lang=enで「Yes we can」を表示する。
これを、localhostで「諸行無常」、localhost?_lang=enで「Impermanence of worldly things」と表示してみよう。

hellosimgプロジェクトでは日本語リソースのview/resource/resource.iniで、

TITLE=初めてのSIMG
MESSAGE=なせば成る

英語リソースのview/resource/resource.enで、

TITLE=Hello, SIMG
MESSAGE=Yes we can.

と定義されている。
どうやらこの2ファイルのMESSAGEをオーバーロードすれば良さそうである。
ovl-hellosimgプロジェクトで以下のように再定義しよう。
日本語リソースのview/resource/resource.iniは、

MESSAGE=諸行無常

英語リソースのview/resource/resource.enは、

MESSAGE=Impermanence of worldly things

となる。

これで、localhostは「諸行無常」、localhost?_lang=enは「Impermanence of worldly things」と表示されるはずだ。

尚、プロジェクトの上下関係はindex.phpで指定する。
因みに下記がovl-hellosimgプロジェクトのindex.phpだ。

<?php
$app_root_path = 'C:/.../ovl-hellosimg';
$base_root_path = 'C:/.../hellosimg';
$simg_root_path = 'C:/.../simg';
set_include_path(
        get_include_path() . PATH_SEPARATOR . $simg_root_path);
ob_start();
require_once('SimgLog.php');
require_once('SimgEntry.php');
SimgLog::getInstance()->initialize(
      $app_root_path . "/logs" . "/trace_" .
          date('Y-m-d') . ".log", "test");
$entry = new SimgEntry(
        array($app_root_path, $base_root_path), $simg_root_path);
$entry->dispatch();
?>

$app_root_pathはプロジェクトのパス、$base_root_pathは再利用されるプロジェクトのパス、$simg_root_pathはSimgのパスだ。
SimgEntryのコンストラクタにプロジェクトの構造(上下関係)を送っている。
arrayの先頭要素が上位プロジェクト、第2要素が下位プロジェクトだ。
配列であるからプロジェクト構造は3個以上も可能である。
複数のプロジェクト間で利用関係を構築できるわけだ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です