2011年10月25日火曜日

cakephp、URL接続後の流れ

http://paymo.j-payment.co.jp/payform/101071に接続した後の
流れを追って見る。


1、URL接続 → ドキュメントルートを参照
apacheに設定されているドキュメントルートを参照する。
この場合、
/home/httpd/www/paymo/payform/101071
を参照する。



2、トップで、mod_rewirteによる参照先を書き換え
cakephpのトップには、「.htaccess」が置かれている。
この中には、mod_rewriteの設定が書かれている。
RewriteEngine on
RewriteRule    ^$    app/webroot/      [L]
RewriteRule    (.*) app/webroot/$1    [L]

これは、RewriteRule (正規表現) (文字列)
(正規表現)に一致した部分を、(文字列)に書き換えるということ

^$ : 先頭から末尾まで何もない。
(.*) : 何でもいい一文字(.)の繰り返し(*)。

つまり、
引数なしの場合 → app/webroot/
引数ありの場合 → app/webroot/引数

今回の場合、

/home/httpd/www/paymo/payform/101071

/home/httpd/www/paymo/app/webroot/payform/101071

を参照することになる。




3,webrootで、mod_rewirteによる参照先を書き換え

webrootに飛ばされたあと、更にrewriteされる。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME}  !-d
RewriteCond %{REQUEST_FILENAME}  !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] 

RewriteCondは、RewriteRuleを適用する条件を設定する。
RewriteCondについて
 
RewriteCond (対象) (条件)
REQUEST_FILENAME : 接続先のファイル名
!-d : 存在するディレクトリ名にはルールを適用しない。
!-f : 存在するファイル名にはルールを適用しない。

※ 「存在する」を確認する範囲は?

この条件に一致する場合、RewriteRuleを適用する。
この場合、
/home/httpd/www/paymo/app/webroot/payform/101071

./index.php?url=/home/httpd/www/paymo/app/webroot/payform/101071

となり、app/webroot/index.phpがよびだされる。



4,app/webroot/index.phpの中では。
いろんな定数の定義が行われる。主にパス。
ROOT, APP_DIR, CAKE_CORE_INCLUDE_PATH, WEBROOT_DIR等を、
app/webroot/index.phpからさかのぼって設定している。

パスの設定が終わったら、
CORE_PATH/cake/bootstrap.php
(/home/httpd/www/paymo/cake/bootstrap.php)をincludeする。

bootstrap.phpの中では、更に
「/cake/basics.php」、
「/cake/config/paths.php」、
「/cake/libs/のなかみ幾つか」が読み込まれている。
また、「Configure::getInstance()」で、Appインスタンスを生成している。

$_GET['url ']が入っていることを確認して、
$Dispatcher = new Dispatcher();
$Dispatcher->dispatch();
を呼び出す。


5、Dispatcherでやること。
 Dispatcherは、「cake/dispatcher.php」で定義されており、
bootstrap.phpの中で、読み込まれている。

function dispatchのコメントを読む限り、
この関数で、URLを読み、該当するコントローラを参照し、
表示までしているとのこと。

「paramsの設定」や「dataの設定」もここでやっている模様。


とりあえずここまで。
もうちょっと追わないと、
formからdataを受け取れる仕組みはわからないかも。。






0 件のコメント:

コメントを投稿