CakePHP2.xで、複数のサービスを運用する

あるあるネタですが、スタートアップや、フリーランスでプログラムを書いてると、

  • ドメインを分けて管理画面を作りたくなった
  • 似たようなサービスを複数作りたくなった

などなど、CakePHPのModelやコンポーネント、ヘルパーなどのリソースを共有したまま、別サイトという形でサービスを立ち上げたいシーンに良く遭遇する。

例えば、「hoge.com」で、サービスの運用をしていて、管理画面を「manage.hoge.com」などといったサブドメインで分けたい場合。

下記、ディレクトリ構成

cake/app/
cake/lib/
cake/plugins/
cake/public/ ←「hoge.com」のドキュメントルート
cake/manage/ ←「manage.hoge.com」のドキュメントルート

とまぁ、こんな感じのディレクトリ構成にして、
サイト別のリソースは「public」「manage」に記述し、
共通で使いたいリソースは「app」に分け管理していきます。

「hoge.com」のドキュメントルート「public」ディレクトリ構成は、

cake/public/Config/
cake/public/Controller/
cake/public/View/
cake/public/tmp/
cake/public/webroot/
.htaccess

基本的に「app」ディレクトリ直下のディレクトリを丸コピでOKです。
.htaccessも「app」直下に存在した.htaccessをコピペでOK。

.htaccessの設定内容は、mod_rewriteを使って、webrootへリライトするのみです。

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>

これにより、「hoge.com」のドキュメントルートが、
cake/public/webroot/になります。

あとは、ドキュメントルートのindex.phpで、リソースの参照先を変更してあげます。
cake/public/webroot/index.php

App::uses('Dispatcher', 'Routing');
App::build(array('Model' => array(ROOT . DS . 'app' . DS . 'Model' . DS)));
App::build(array('Console' => array(ROOT . DS . 'app' . DS . 'Console' . DS)));
App::build(array('Vendor' => array(ROOT . DS . 'app' . DS . 'Vendor' . DS)));

$Dispatcher = new Dispatcher();
$Dispatcher->dispatch(
	new CakeRequest(),
	new CakeResponse()
);

これで、「hoge.com」ModelとConsoleとVendorのリソースは、
cake/app/直下の、ModelとConsoleとVendorで管理されます。

tmp/や、Configなどはおこのみで♪


プロに聞いてみる
株式会社adanはエンジニアのキャリアに真剣に向き合っています。
企業の情報エンジニアとしてのキャリアアップの方法、現在の待遇(給料・報酬)未経験からのステップアップ方法などのご相談を受け付けています。
お気軽にお問合せください。