以前にEclipseとPDTの環境を作ることを調べたときに,MilkyJoeが書いていた次の文章がずっと気になっていました。
I follow the Cake convention of storing all my CakePHP projects in the Cake root directory (making a copy of /app, renaming it, and changing the constant APP_DIR in /app/webroot/index.php to the name of my directory). You should probably follow this convention as well.
appフォルダのコピーを作成してリネームするとういのがCakeの慣例だと言っています。僕はこれまではappフォルダの内容を直接さわっていましたが,是非その慣例には従いたいものです。いろいろと実験が終わったので,再度Cake開発環境を再構築することにしましたので,複数のappフォルダを持った場合の動きについて調べてみました。

図のようなフォルダ構成で,scheduleというフォルダがappフォルダのコピーになります。これでどのURLにアクセスしたらのアプリケーションが実行されるのかを調べてみます。appフォルダ,scheduleフォルダのそれぞれの viwes/layouts フォルダに default.thtml を配置し,そのタイトル部分を変更することでどのフォルダのアプリケーションが実行されているのかを判断しました。
http://localhost/cake/app/
では当然ながらappフォルダのアプリケーションが実行されました。ですから,
http://localhost/cake/schedule/
ではscheduleフォルダのアプリケーションが実行されます。
http://localhost/cake/
の場合は,appフォルダのアプリケーションが実行されます。これはルートフォルダにある.htaccessが次のようになっているためです。
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule>
ルートフォルダへのアクセスは,app/webrootに回されますから,app/webrootにあるindex.phpが実行されるわけです。
appフォルダ(あるいはscheduluフォルダ)にある.htaccessは次のようになっています。このフォルダにもindex.phpがあるのですが,rewriteが効いている限り実行されないと思います。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
ここでは現在のフォルダ下のwebrootにあるindex.phpが実行されます。
ちなみに,冒頭で引用した文章でMilkyJoeは,APP_DIR in /app/webroot/index.php の中のAPP_DIR定数を変更しろと書いていますが,その部分のコードはwebrootにあるindex.phpでは
if (!defined('APP_DIR')) { //define('APP_DIR', 'DIRECTORY NAME OF APPLICATION'; define('APP_DIR', basename(dirname(dirname(__FILE__))));
と,index.phpの場所からAPP_DIRを設定するようになっているので,webrootがappフォルダの下にある限り書き換える必要はありません。公開環境ではこういうところを色々と設定する必要があるでしょう。
開発環境で複数のアプリを開発するときには,appフォルダをコピーしてリネームすれば,動作させるにはそのフォルダ名までURLで指定してやればOKだということがわかりました。
EclipseのWorkspaceについて
以前のエントリ「すべてのインストールメモ」にて,
Eclipseを起動したときに「Select workspace」と表示されます。MilkyJoeによれば,ここではwebサイトのドキュメントルート(C:\xampp\htdocs)を指定するのがよいと言っています。実はこれ僕としてはC:\xampp\htdocs\cakeを指定した方が楽なような気がします。そこであえてMilkyJoeに逆らって設定してみます。
としました。結果的にこれで困ることはないようです。僕の場合はドキュメントルートの下にcakeフォルダを作りそこにCakePHP1.18を入れ,cake12フォルダには1.2を入れています。それらの間を切り替えるにはWorkspaceを変更しています。それが面倒な場合は,MilkyJoeの言うようにドキュメントルートをWorkspaceにする方がいいでしょう。