このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0068

モジュール

 他のフレームワークのようにスマートではありませんが、CodeIgniterでも複数のアプリケーションを一つの システム上に構築することができます。

 通常、URIパスは第一セグメントを「コントローラ」、第二セグメントを「アクションメソッド」として ルーティングしますが、複数のアプリケーションを持つ場合、それぞれのアプリケーションをモジュールとして、 第一セグメントを「モジュール」、第二セグメントを「コントローラ」、第三セグメントを「アクションメソッド」 としてルーティングさせることができます。

    http://your.site/module/controller/action/parameter/…

 この章では、ゲストページ、管理ページ、ユーザページ、 システム連携用APIの4つのアプリケーションを それぞれ、「front」、「admin」、「user」、「api」モジュールとして構築することを前提として説明していきます。

ファイルシステム構成

 モジュールを構成するには、CodeIgniterをインストールしたディレクトリ配下に以下のようにして ファイルシステムを構成します。
 CodeIgniterをインストールしたディレクトリに「modules」ディレクトリを作成し、更に、「modules」ディレクトリ内に 各モジュールのディレクトリを作成します。
 「common」ディレクトリは各モジュールから共通に利用するモデルやライブラリクラスを配置するための 共通ディレクトリとします。
 (CodeIgniterが「/var/www/vhosts/webapp」ディレクトリにインストールされているとします。)

    $ cd /var/www/vhosts/webapp
    $ mkdir -p modules/{front,admin,user,api,common}
    /var/www/vhosts/webapp/
                       |- system/
                       |- htdocs/
                       |- application/
                       |- modules/
                               |- front/
                               |- admin/
                               |- user/
                               |- api/
                               |- common/
    

 各モジュールのディレクトリを作成したら、「application」ディレクトリ配下のディレクトリとファイルを 各モジュールディレクトリ配下にコピーします。

    $ cp -r application/* modules/front/
    $ cp -r application/* modules/admin/
    $ cp -r application/* modules/user/
    $ cp -r application/* modules/api/

 「common」ディレクトリには、各モジュールから共通で利用するための 「config」「models」「helper」「libraries」ディレクトリをコピーします。

    $ cp -r application/{config,models,helper,libraries} modules/common/

フロントコントローラ

 フロントコントローラの配置

 各モジュールに対応したフロントコントローラを配置します。
 フロントコントローラのファイル名は、自由に命名することが可能ですが、ここでは、 管理しやすいようにフロントコントローラのファイル名をモジュール名に合わせています。

    $ cp htdocs/index.php htdocs/front.php
    $ cp htdocs/index.php htdocs/admin.php
    $ cp htdocs/index.php htdocs/user.php
    $ cp htdocs/index.php htdocs/api.php

 $application_folder の設定

 各フロントコントローラの「$application_folder」を設定します。

    • front.php
    $application_folder = '../modules/front';
    • admin.php
    $application_folder = '../modules/admin';
    • user.php
    $application_folder = '../modules/user';
    • api.php
    $application_folder = '../modules/api';

mod_rewrite

 Apacheの「mod_rewrite」を設定します。
 「.htaccess」ファイルでの設定と、「httpd.conf」での設定では記述の仕方が若干異なるので注意してください。

    • .htaccess
    RewriteEngine on
    RewriteCond $1 !^(front\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^/front/(.*)$ /front.php/$1 [L]
    RewriteCond $1 !^(admin\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^/admin/(.*)$ /admin.php/$1 [L]
    RewriteCond $1 !^(user\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^/user/(.*)$ /user.php/$1 [L]
    RewriteCond $1 !^(api\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^/api/(.*)$ /api.php/$1 [L]
    • httpd.conf
    RewriteEngine on
    RewriteCond $1 !^/(front\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^/front/(.*)$ /front.php/$1 [L]
    RewriteCond $1 !^/(admin\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^/admin/(.*)$ /admin.php/$1 [L]
    RewriteCond $1 !^/(user\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^/user/(.*)$ /user.php/$1 [L]
    RewriteCond $1 !^/(api\.php|images|javascripts|stylesheets|robots\.txt|favicon\.ico)
    RewriteRule ^/api/(.*)$ /api.php/$1 [L]

config.php 設定

 各モジュールディレクトリ内の「config/config.php」 設定ファイルで以下の設定を行う必要があります。
 その他の設定項目は、必要に応じて適宜設定してください。

$config['base_url']

 各モジュールのベースURLを設定します。

    • modules/front/config/config.php
    $config['base_url'] = 'http://your.site/front';
    • modules/admin/config/config.php
    $config['base_url'] = 'http://your.site/admin';
    • modules/user/config/config.php
    $config['base_url'] = 'http://your.site/user';
    • modules/api/config/config.php
    $config['base_url'] = 'http://your.site/api';

$config['index_page']

 空文字に設定します。

    $config['index_page'] = '';

$config['log_path']

 アプリケーション毎で別ファイルにログを出力する場合は、それぞれのモジュールの設定ファイルで
設定する必要があります。

    • modules/front/config/config.php
    $config['log_path'] = '../modules/front/logs/';
    • modules/admin/config/config.php
    $config['log_path'] = '../modules/admin/logs/';
    • modules/user/config/config.php
    $config['log_path'] = '../modules/user/logs/';
    • modules/api/config/config.php
    $config['log_path'] = '../modules/api/logs/';

 全てのモジュールで同一のログファイルに出力する場合は、同じログディレクトリを設定をします。

    • modules/front/config/config.php
    $config['log_path'] = '/var/log/webapp/';
    • modules/admin/config/config.php
    $config['log_path'] = '/var/log/webapp/';
    • modules/user/config/config.php
    $config['log_path'] = '/var/log/webapp/';
    • modules/api/config/config.php
    $config['log_path'] = '/var/log/webapp/';

共通(common)ディレクトリ

 モジュール構成で複数のアプリケーションを運用する場合、それぞれのモジュールで共通のユーザ設定ユーザライブラリ、ヘルパー、モデルクラスが利用できると便利です。
 各モジュールの「config/autoload.php」自動ロード設定を行うことで、これらを共通で利用することが可能になります。

 もし、これらを共通で利用することがない場合は、この設定は不要です。

    • autoload.php
    $autoload['packages'] = array(APPPATH . '../common');

    • 例:
        |- common/
            |- config/
            |      |- common_config.php
            |- libraries/
            |      |- common_lib.php
            |- modeles/
            |      |- common_model.php
            |- helper/
                   |- common_helper.php