Home > CakePHP > CakePHP解析

CakePHP解析 Archive

Configureクラスとシングルトン (CakePHP解析 #4)


本日は「bootstrap.php」の解析ですが、このファイルはCakePHPのかなり重要な部分な感じがします。
ちょこっとずつ進めていきます。

まずは↓から。
[sourcecode language='php']
require LIBS . ‘configure.php’;
$paths = Configure::getInstance();
[/sourcecode]

cake/libs内のconfigure.phpを読み込んだ後、インスタンスを取得しています。getInstance()から、Singleton(シングルトン)であることが分かります。PHP4のシングルトンの解説は下記のサイトが分かりやすいです。

PHP4でデザインパターン(Singleton編)

また、&getInstance()メソッドの「&」や「&=」の意味は「てくめも@coop」さんのサイトに解説が載っています。

PHP4 と PHP5 の Sigleton Pattern

ソッド定義とメソッド呼び出しの両方に & を付けないと、参照でなくコピーになってしまい…

今日はあまり時間がないので、ここまでorz

次回はbootstrap.phpが「Configure」インスタンスで何をしているのか解析したいと思います。

/app/webroot/.htaccess(CakePHP解析 #3)


今回は「/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」の意味ですが、とみぞーノートさんのサイトに詳しくまとめられています。

mod_rewrite – QSAフラグ

次回は「cake/bootstrap.php」を解説したいと思います。

/.htaccess(CakePHP解析 #2)


前回は「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を知る上で正規表現の知識は欠かせません。自分の正規表現入門お薦めサイトはこちらのサイトです。
サルにもわかる正規表現入門

更に正規表現を理解したい人はやはり「フクロウ本」を読むことをお奨めします。

詳説 正規表現 第3版
詳説 正規表現 第3版
posted with amazlet at 08.09.21
Jeffrey E.F. Friedl
オライリージャパン
売り上げランキング: 32534
おすすめ度の平均: 5.0

5 正規表現を確実にマスターできる
5 DOSのコマンドのような簡単なものから

[L]って何?

これまた、技林さんのサイトの解説が分かりやすいです。

mod_rewrite サンプル集

[L]を指定している所でマッチしたら、それ以降のマッチング処理をしないということですね。

(.*) app/webroot/$1だけで良くね?

と思って、ローカル環境で^$ app/webroot/を外して試してみましたが普通に動きました。うーん、でもやっぱ何かしらの理由があるんだろうな…。誰か分かる方いらっしゃいましたら教えてください(><)

次のエントリーでは「app/webroot/.htaccess」を解説したいと思います。

ホーム > CakePHP > CakePHP解析

フィード

メタ

Return to page top