設定ファイルで柔軟に

フレームワークとしての柔軟性

フレームワークって、その名の通り「枠組み」です。
用意された枠組みに、ルールどおりに実装していく事で楽にシステムを組む事ができます。

なので、あらゆる事をルール付けて、こう実装しないと動かない!
っていうガチガチのフレームワークなら迷いもなくスムーズに実装が出来ます。

しかし逆に柔軟性がなくなります。例外的な実装が出来なく、もしくは難しくなります。

フレームワークの柔軟性はその作りによって左右されます。
柔軟性が高いという事は、スクリプトの頭での初期設定、または設定ファイルによる初期設定がたくさん必要になるという事です。
これがほとんどいらないようなフレームワークというのは、設定などするまでもなくルールが最初から決まっているという事です。
例えばクラス名の名前付け規則、ディレクトリ構成などです。

初期設定以外にも例えば、ビューテンプレートはアクションごとに用意する前提で、テンプレートはアクション名そのままのテンプレートを所定の位置に作ることで、後は何も意識せずにそのテンプレートが読み込まれる仕組みとする事により、楽に実装ができますが、
同じアクションでも場合によって使用するテンプレートを分けたい、または違うアクションでも同じテンプレートを使用したい、ということはよくあります。
それに対応できるような仕組みを用意するという事が、柔軟性を広げるという言えるわけです。

基本思想としては、ガチガチなルール付けに沿って楽に実装できる仕組みにしておき、例外の場合に手動で設定できる仕組みを用意しておく、と考えるのが良いと思います。

設定ファイルによる柔軟性確保

柔軟性を考える場合に非常に有効なのが設定ファイルの使用です。

例えば考えられるのは、
サイトのコンテンツ分類上、URLのコントローラー部分とかを分けたいが、ロジック的には全く同じっていうような場合があると思います。

こういう場合に全く同じコントローラーをコピーして名前だけ変えて使うってのもどうかと思います。
ていうかやるべきではありません。

こういう場合はコントローラーは一つだけ作り、設定ファイルにしたがってコントローラーの転送を行うという仕組みを作る方法が考えられます。

例えば、このサイトのような解説系のサイトの場合、その解説内容の分類により、URLを分けたいという考えになるでしょう。

このサイトで言えば、
基礎編は
http://www.objective-php.net/basic/
実践編は
http://www.objective-php.net/practice/
です。

MVC的に見ると、コントローラー部分が既に違います。

実はこのサイトのコンテンツ内容は全てDBに保存してあるものを表示しているのですが、
取得ロジックに違いはありません。コントローラーやアクションを条件にしているので、実際に取得される結果は違うものになるってだけです。

なのでコントローラーは共通で、例えばですがContentsControllerとして、
URLより取得したコントローラー名がbasicのとき、実際に使用するコントローラーはcontents、practiceのときもcontents、となるように設定ファイルで設定をするのです。

当然、設定ファイルの内容により転送を行う仕組みはDispatcherに書く必要がありますが。

一つの例を示します。

transfer.ini
basic = contents
practice = contents

こんなiniファイルを作ります。
意味は、「=」の左辺のコントローラーが指定された場合は実際には右辺のコントローラーとして処理する、ということです。

これを処理するメソッドを作ります。

<?php

protected function transferControler($controller)
{
    $iniPath = $this->systemRoot . '/ini/transfer.ini';
  if (true == file_exists($iniPath)) {
        $ini = parse_ini_file($iniPath);
        if (true == array_key_exists($controller, $ini)) {
            $controller = $ini[$controller];
        }
    }
    return $controller;
}

?>

このメソッドをDispatcherに組み込めば、設定ファイルに応じてコントローラーが転送されるという動きが実現できます。

こういう感じでiniファイル等をうまく活用することで、フレームワークとしての柔軟性を向上させる事が可能なわけです。

そんなめんどくさい事考えたくない、ルールどおり作るんだ!と思えばiniファイルさえ作らなければいいだけの話ですから。