CakePHPをダウンロードして解凍して展開後のお話。
URLがどのように解釈されているかのお話。
【.htaccess】と【index.php】
この2つの組み合わせが3つ存在します。
1つ目:CakePHP直下
2つ目:app直下
3つ目:webroot直下
それぞれの【.htaccess】の中身が下記になります。
【CakePHP直下】
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] </IfModule>
【app直下】
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
【webroot直下】
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>
【.htaccess】ファイルの設定により、
http://URL/controller/action/param
となっているURLでアクセスした場合、
http://URL/app/webroot/index.php?url=controller/action/param
と言うように解釈され処理が進んでいきます。
これには当然mod_rewriteや.htaccessが利用できる場合に限られますが、じゃー利用できない場合はと言うと、
【CakePHP直下】のindex.phpファイルがmod_rewrite・.htaccessの変わりを行います。
そして解釈されたURL(http://URL/app/webroot/index.php?url=controller/action/paramの形)は
【webroot直下】のindex.phpファイル内でDispatcherに渡されて,URLからコントローラー・モデル・ビューを判断し、それぞれのインスタンス生成が行われます。
この時、命名規則に関する処理は【inflector.php】と言うファイル内で解決されています。
単語の先頭を大文字にしたり複数形の処理もここで行われています。
personがなんでpeopleって解釈されるか疑問だったんですよねー
ちなみにdispatcherとinflectorのファイルの場所は
cake/dispatcher.php
cake/libs/inflector.php
にあります。
app/config/core.php内の下記定数の値を0~3のどれかにを変更することで
cakephpのデバッグをコントロールできます。
Configure::write(’debug’, 0~3);
0:本番運用
エラー出力無し。
app/tmp/cache/models の中にDBスキーマのキャッシュファイルがあるが,
これは【1】以上にしないと更新されない。
【0】後にDBを変更したときは、手動でこのキャッシュファイルを消さないといけない。
1:開発用(PHPエラー出力)
error_reporting(E_ALL)
ini_set(’display_errors’, 1)
上記2つが内部的に実行されます。
2:開発用(1プラスDBクエリー情報の出力)
・ (default) 8 queries took 10 ms」クエリの数(8)と,合計時間(10ms)
・Nr 実行したクエリーの連番
・Query 実行したSQL文
・Error エラー情報
・Affected UPDATEやDELETEの際は,影響した行数、 SELECTの場合は結果の行数
・Nom. rows 結果の行数
・Took (ms) DB上でのクエリの実行時間
3:開発用(2プラスコントローラーのオブジェクト情報)
ビューかコントローラーに記述する必要がある。
これはあまり使用しないでしょう。オブジェクト情報が見たければ、その都度pr($this)など記述
すればいいと思います。