CakePHP解析 Archive
Configureクラスとシングルトン (CakePHP解析 #4)
- 2008-06-05 (木)
- CakePHP解析
本日は「bootstrap.php」の解析ですが、このファイルはCakePHPのかなり重要な部分な感じがします。
ちょこっとずつ進めていきます。
まずは↓から。
[sourcecode language='php']
require LIBS . ‘configure.php’;
$paths = Configure::getInstance();
[/sourcecode]
cake/libs内のconfigure.phpを読み込んだ後、インスタンスを取得しています。getInstance()から、Singleton(シングルトン)であることが分かります。PHP4のシングルトンの解説は下記のサイトが分かりやすいです。
また、&getInstance()メソッドの「&」や「&=」の意味は「てくめも@coop」さんのサイトに解説が載っています。
PHP4 と PHP5 の Sigleton Pattern
ソッド定義とメソッド呼び出しの両方に & を付けないと、参照でなくコピーになってしまい…
今日はあまり時間がないので、ここまでorz
次回はbootstrap.phpが「Configure」インスタンスで何をしているのか解析したいと思います。
/app/webroot/.htaccess(CakePHP解析 #3)
- 2008-05-20 (火)
- CakePHP解析
今回は「/app/webroot/.htaccess」を解析します。
ソースは下記のとおり。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
RewriteCond
RewriteCondはURLをRewriteする条件になります。
「%{REQUEST_FILENAME}」は「要求したファイル名(フォルダ名)が」という意味。
URL指定で、「/app/webroot/aaa」ならば「aaa」がそれに当たります。
そして「!-d」は、この例であれば「aaa」というフォルダが存在するのであればRewriteしない。「!-f」はファイルが存在するのであればRewriteしないということになります。
この処理については、phaさんが自習室で詳しくまとめられています。
RewriteRuleをいろいろ試す会:RewriteCondを使う
QSAとは?
次にRewriteRule ^(.*)$ index.php?url=$1 [QSA,L]ですが、
URL書き換え部分は(.*)が$1に書き換わります。
「/app/webroot/aaa」でアクセスしたら、「/app/webroot/index.php?url=aaa」となります。
後にくっついている[QSA,L]の「QSA」の意味ですが、とみぞーノートさんのサイトに詳しくまとめられています。
次回は「cake/bootstrap.php」を解説したいと思います。
/.htaccess(CakePHP解析 #2)
- 2008-05-12 (月)
- CakePHP解析
前回は「app/webroot/index.php」から学習をスタートしましたが、じゃぁ「index.php」や「app/index.php」どうなっているのかと言いますと.htaccessによってシカトされてますね。おそらくmod_rewriteが使えない場合の対策なのでしょうが、その場合の処理まで解析していてはキリがありません。今日は最上層にある/.htaccessの解析をします。
/.htaccess(app/.htaccessもほぼ同じ内容)
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule>
<IfModule mod_rewrite.c>~</IfModule>
まずは、<IfModule mod_rewrite.c>~</IfModule>ですが、これはmod_rewriteモジュールが有効かどうか調べて、有効であれば中身の処理を実行するという意味です。
RewriteEngine on以下
次に中身の解説ですが、こちらの技林さんのサイトの解説が凄く分かりやすいです。この処理でapp/webroot/に飛ばしているわけですね。
mod_rewrite
正規表現は欠かせません
また、mod_rewriteを知る上で正規表現の知識は欠かせません。自分の正規表現入門お薦めサイトはこちらのサイトです。
サルにもわかる正規表現入門
更に正規表現を理解したい人はやはり「フクロウ本」を読むことをお奨めします。
オライリージャパン
売り上げランキング: 32534

正規表現を確実にマスターできる
DOSのコマンドのような簡単なものから
[L]って何?
これまた、技林さんのサイトの解説が分かりやすいです。
[L]を指定している所でマッチしたら、それ以降のマッチング処理をしないということですね。
(.*) app/webroot/$1だけで良くね?
と思って、ローカル環境で^$ app/webroot/を外して試してみましたが普通に動きました。うーん、でもやっぱ何かしらの理由があるんだろうな…。誰か分かる方いらっしゃいましたら教えてください(><)
次のエントリーでは「app/webroot/.htaccess」を解説したいと思います。
