はい、そーゆーわけで、前回の終わりに宣言した通り、index.phpの話をしたいと思います。
正直、分かってみれば全然たいしたことなかったんですけど、分かるまでは無駄に苦戦しまして……未だにエンジニアとしてはその程度のレベルでしかないってのが窺えた瞬間でしたね。
ざっくり書くと、こんな感じですね。
ディレクトリ名は適当ですけど、あかつきのお宿の現状のディレクトリ構成はこんな感じです。
で、そのときにwebrootの中にあったindex.phpをちょっとだけ書き換える必要があるんですよ。主に定数の部分が。
デフォルトだとindex.phpの中身はこんな感じになってます。本当はもうちょっといろいろ書いてあるけど、今回は書き換えの必要がある部分だけね。
要は、appやcakeのディレクトリが置いてあるパスを定数で設定しているわけですね。ここを任意に書き換えて参照できるようにしてあげないといけない。
例えば、/home/test/cake/というディレクトリの下にappやらcakeを置いてるとしたら、こんな感じに書き換える。
こうすることで、定数のROOTは『/home/test/cake』を表すようになり、appディレクトリのパスを表す定数APP_DIRの方は『app』を表すようになります。まあ、APP_DIRの方はもしかしたら書き換えなくても動くかもしれないね。僕の場合は上手くいかなかったから書き換えたけど。
そうそう。前回の記事でも書いたんですけど、Cake2.0の本体を落として来た場合、デフォルトのディレクトリ構成ではCakeのコアライブラリがどういうわけかlibというディレクトリの下に入っているんですね。
まあそれ自体はそんなに大きな問題ではないんですが……とりあえず2.0の方のindex.phpを見ると、デフォルトがこんな感じになってます。
まあ、基本的には前と変わりません。
ただ一点違うのが、『CAKE_CORE_INCLUDE_PATH』の定数がなぜかコメントアウトされてます。
こういう改修ってどういう利点につながってるのかってのは僕程度の人間では全く理解できないのですが、今回はこの定数が定義されているかどうかの分岐があるみたいなんですね。
index.phpの中身をもうちょい下にスクロールさせると、こんなソースが出て来ます。
CAKE_CORE_INCLUDE_PATHが定義されていたら、その定数で示されるパスの直下にあるCakeというディレクトリの中のbootstrap.phpを読み込むと、でも定義されてなかったら……まあ何かとりあえずどっかにあるCakeディレクトリのbootstrap.phpを読み込むと、そんな感じですね。
細かい説明は抜きにして、以前のバージョンからの移行だったら、たぶんこの定数は定義しておく方が楽なような気がしたので、僕はコメントアウトを外して適当に書き直しました。
1.2のときと同じにしたって感じですね。
で、説明が前後しちゃって申し訳ないんですけど、僕はデフォルトの構成でCakeディレクトリの上に何でlibなんてディレクトリを設けているのかがよく分からなかったもんで、libのディレクトリは削りました。
だからこうなってます。
もしlibをそのまま残した状態にするなら、『CAKE_CORE_INCLUDE_PATH』は以下のように書く必要があります。
たぶんlibは削っても問題がないように思うんですけど、この新しいディレクトリ構成が実はとんでもないメリットを生み出す構成だったりしたらどうしよ……。
今回はここまでですね。思ったより長くなっちゃったね。めんご。
次回は何の話をしようかな……コントローラー周りの話をちょっとしたいと思います。
では、次回もこのチャンネルでお会いしましょう。
アディオス、アミーゴ。
正直、分かってみれば全然たいしたことなかったんですけど、分かるまでは無駄に苦戦しまして……未だにエンジニアとしてはその程度のレベルでしかないってのが窺えた瞬間でしたね。
Cake1.2の頃(現在のお宿)の設定は
ドキュメントルートの直下に落として来た本体をそのまま突っ込む場合は問題ないんですけど、それだとセキュリティが弱いというか……URL叩いたらディレクトリが全部追えちゃうってのはあまりよろしくないわけで、だから通常デフォルトでappディレクトリの下にあるwebrootと、appやcakeのコア部分を切り離してサーバーに置くってやり方を、このお宿でもやってます。ざっくり書くと、こんな感じですね。
・cake
・app
・コントローラーやモデル、ビュー
・cake
・コアライブラリ
・www
・index.php
・css
・js
・その他.htaccessとか
ディレクトリ名は適当ですけど、あかつきのお宿の現状のディレクトリ構成はこんな感じです。
で、そのときにwebrootの中にあったindex.phpをちょっとだけ書き換える必要があるんですよ。主に定数の部分が。
デフォルトだとindex.phpの中身はこんな感じになってます。本当はもうちょっといろいろ書いてあるけど、今回は書き換えの必要がある部分だけね。
/**
* The full path to the directory which holds "app", WITHOUT a trailing DS.
*
*/
if (!defined('ROOT')) {
define('ROOT', dirname(dirname(dirname(__FILE__))));
}
/**
* The actual directory name for the "app".
*
*/
if (!defined('APP_DIR')) {
define('APP_DIR', basename(dirname(dirname(__FILE__))));
}
/**
* The absolute path to the "cake" directory, WITHOUT a trailing DS.
*
*/
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', ROOT);
}
要は、appやcakeのディレクトリが置いてあるパスを定数で設定しているわけですね。ここを任意に書き換えて参照できるようにしてあげないといけない。
例えば、/home/test/cake/というディレクトリの下にappやらcakeを置いてるとしたら、こんな感じに書き換える。
/**
* The full path to the directory which holds "app", WITHOUT a trailing DS.
*
*/
if (!defined('ROOT')) {
define('ROOT', DS.'home'.DS.'test'.DS.'cake');
}
/**
* The actual directory name for the "app".
*
*/
if (!defined('APP_DIR')) {
define('APP_DIR', 'app');
}
/**
* The absolute path to the "cake" directory, WITHOUT a trailing DS.
*
*/
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
define('CAKE_CORE_INCLUDE_PATH', ROOT);
}
こうすることで、定数のROOTは『/home/test/cake』を表すようになり、appディレクトリのパスを表す定数APP_DIRの方は『app』を表すようになります。まあ、APP_DIRの方はもしかしたら書き換えなくても動くかもしれないね。僕の場合は上手くいかなかったから書き換えたけど。
バージョン2.0の場合
上と同じようにwebrootとappやcakeを分けるとすると、ディレクトリ構成はこんな感じになります。・cake
・app
・コントローラーやモデル、ビュー
・lib
・Cake
・コアライブラリ
・www
・index.phpほか
そうそう。前回の記事でも書いたんですけど、Cake2.0の本体を落として来た場合、デフォルトのディレクトリ構成ではCakeのコアライブラリがどういうわけかlibというディレクトリの下に入っているんですね。
まあそれ自体はそんなに大きな問題ではないんですが……とりあえず2.0の方のindex.phpを見ると、デフォルトがこんな感じになってます。
/**
* The full path to the directory which holds "app", WITHOUT a trailing DS.
*
*/
if (!defined('ROOT')) {
define('ROOT', dirname(dirname(dirname(__FILE__))));
}
/**
* The actual directory name for the "app".
*
*/
if (!defined('APP_DIR')) {
define('APP_DIR', basename(dirname(dirname(__FILE__))));
}
/**
* The absolute path to the "cake" directory, WITHOUT a trailing DS.
*
* Un-comment this line to specify a fixed path to CakePHP.
* This should point at the directory containing `Cake`.
*
* For ease of development CakePHP uses PHP's include_path. If you
* cannot modify your include_path set this value.
*
* Leaving this constant undefined will result in it being defined in Cake/bootstrap.php
*/
//define('CAKE_CORE_INCLUDE_PATH', ROOT . DS . 'lib');
まあ、基本的には前と変わりません。
ただ一点違うのが、『CAKE_CORE_INCLUDE_PATH』の定数がなぜかコメントアウトされてます。
こういう改修ってどういう利点につながってるのかってのは僕程度の人間では全く理解できないのですが、今回はこの定数が定義されているかどうかの分岐があるみたいなんですね。
index.phpの中身をもうちょい下にスクロールさせると、こんなソースが出て来ます。
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
if (function_exists('ini_set')) {
ini_set('include_path', ROOT . DS . 'lib' . PATH_SEPARATOR . ini_get('include_path'));
}
if (!include('Cake' . DS . 'bootstrap.php')) {
$failed = true;
}
} else {
if (!include(CAKE_CORE_INCLUDE_PATH . DS . 'Cake' . DS . 'bootstrap.php')) {
$failed = true;
}
}
CAKE_CORE_INCLUDE_PATHが定義されていたら、その定数で示されるパスの直下にあるCakeというディレクトリの中のbootstrap.phpを読み込むと、でも定義されてなかったら……まあ何かとりあえずどっかにあるCakeディレクトリのbootstrap.phpを読み込むと、そんな感じですね。
細かい説明は抜きにして、以前のバージョンからの移行だったら、たぶんこの定数は定義しておく方が楽なような気がしたので、僕はコメントアウトを外して適当に書き直しました。
/**
* The full path to the directory which holds "app", WITHOUT a trailing DS.
*
*/
if (!defined('ROOT')) {
define('ROOT', DS.'home'.DS.'test'.DS.'cake');
}
/**
* The actual directory name for the "app".
*
*/
if (!defined('APP_DIR')) {
define('APP_DIR', 'app');
}
/**
* The absolute path to the "cake" directory, WITHOUT a trailing DS.
*
* Un-comment this line to specify a fixed path to CakePHP.
* This should point at the directory containing `Cake`.
*
* For ease of development CakePHP uses PHP's include_path. If you
* cannot modify your include_path set this value.
*
* Leaving this constant undefined will result in it being defined in Cake/bootstrap.php
*/
define('CAKE_CORE_INCLUDE_PATH', ROOT);
1.2のときと同じにしたって感じですね。
で、説明が前後しちゃって申し訳ないんですけど、僕はデフォルトの構成でCakeディレクトリの上に何でlibなんてディレクトリを設けているのかがよく分からなかったもんで、libのディレクトリは削りました。
だからこうなってます。
・cake
・app
・コントローラーやモデル、ビュ
・Cake
・コアライブラリ
・www
・index.phpほか
もしlibをそのまま残した状態にするなら、『CAKE_CORE_INCLUDE_PATH』は以下のように書く必要があります。
define('CAKE_CORE_INCLUDE_PATH', ROOT.DS.'lib');
たぶんlibは削っても問題がないように思うんですけど、この新しいディレクトリ構成が実はとんでもないメリットを生み出す構成だったりしたらどうしよ……。
今回はここまでですね。思ったより長くなっちゃったね。めんご。
次回は何の話をしようかな……コントローラー周りの話をちょっとしたいと思います。
では、次回もこのチャンネルでお会いしましょう。
アディオス、アミーゴ。