ディレクトリ構成

ディレクトリ構成

MVCフレームワークにおいてはその性質上、システムのディレクトリ構成も規則に従う必要があります。通常の実装とは違い、ある一定のルールに従った構成にすることで成り立つものです。

そこでMVCにおけるディレクトリ構成をどうするかですが、
まず、フレームワークのディレクトリを作るとします。

このコーナーに出てきているのは全てMVCに絡むクラスばかりなので、とりあえず、mvcというディレクトリの下に格納します。その他、ライブラリ等を作ればまた別のディレクトリを作る想定です。

(ROOT)/
  ∟framework/
    ∟mvc/
      ∟ControllerBase.php
      ∟Dispatcher.php
      ∟ModelBase.php
      ∟Post.php
      ∟QueryString.php
      ∟Request.php
      ∟UrlParameter.php
      ∟Smarty/
        

このframework以下のクラスはあらゆるシステムで共通に使うものです。

次に、個々のシステム(Webサイト単位)のディレクトリを作ります。

(ROOT)/
  ∟framework/
    ∟mvc/
      ∟ControllerBase.php
      ∟Dispatcher.php
      ∟ModelBase.php
      ∟Post.php
      ∟QueryString.php
      ∟Request.php
      ∟UrlParameter.php
      ∟Smarty/ 
 
  ∟ec/ (通販サイト)

  ∟cooking/ (お料理サイト)


        

で、各システムのディレクトリ構成は、フレームワークで規定されるとおりに従います。
自作のフレームワークなので、規定も自分で決めます。
その規定をどのようにするかですが、

MVCとして綺麗なのは以下のような感じでしょうか。

  ∟ec/ (通販サイト)
    ∟controllers/
      ∟IndexController.php
      ∟CartController.php
      ∟ProductsController.php
      ∟RankingController.php
    ∟models/
      ∟data/
        ∟CartHeader.php
        ∟CartDetail.php
        ∟Product.php
        ∟Customer.php
      ∟Cart.php
      ∟Customer.php
    ∟views/
      ∟templates/
        ∟index/
          ∟index.tpl
        ∟cart/
          ∟index.tpl
        ∟products/
          ∟list.tpl
          ∟detail.tpl
        ∟ranking/
          ∟product.tpl
          ∟shop.tpl
      ∟templates_c/
    ∟htdocs/
      ∟css/
      ∟images/
      ∟js/
      ∟.htaccess
      ∟index.php

つまり、MVCのMとVとCをそれぞれ明確にディレクトリ分けし、
コントローラークラスのファイルは全てcontrollersの中へ、
モデルクラスのファイルは全てmodelsの中へ、
ビューテンプレートはviewsの下のtemplatesの中へ、
という感じです。

ディレクトリ構成上もMVCの区分けを重視した例です。

ちなみにhtdocsがweb公開ディレクトリです。つまりこのhtdocs以下は、URLでのアクセス可能領域になります。直接URLがディレクトリ階層を現す領域ですね。

注目すべきは、直接外部よりアクセスできるスクリプトはindex.phpのみということです。
セキュリティ上も、クラスファイルなど直接外部より参照できる必要のないものは全て公開ディレクトリの外に置くことが望ましいです。
システムが一切絡まない、完全な静的HTMLがある場合はhtdocs以下に配置することになります。