仕事で cakePHP をインストールしたレンタルサーバが変なエラーを出して動いてくれないっ!!
で、今までよく理解していなかった cake のフローを追っていく羽目に。せっかくなので、書いて残しておきます。(cake1.2.3.8166 を基にしていますが、他もあまり変らないかも)
dispatcher.php が基本なんですが、その辺はいくつかサイトを見つけたので楽しました。
で、libs/controller/controller.php と libs/view/view.php に関してはこちらを見つけました...
が、もうちょっと細かいところを調べてみたかったので、その辺をもう一度追ってみることにします。(いつもながら、の大体です。細かいことはカット)
ディスパッチャはコントローラをインヴォ~ク
まず、dispatcher は _invoke メソッドを使って、という所から。このメソッド(206~241行)はコントローラの名前(articles_controller など)といろいろなパラメータを受け取って、それをコントローラの constructClasses メソッド(436~462行)に渡します。このメソッドはコントローラが必要なモデルとコンポーネントを読み込みます。
そのあと、_invoke はいくつかごにょごにょして(コンポーネントを実行させる、コントローラの beforeFilter を行なう、リクエストされたアクションが存在しなかったら Missing Action の警告を出す、など)リクエストされたアクションを実行します。これは、controller.php の親 libs/object.php の dispatchMethod メソッド(112~130行)で行われます。これで、モデルといろいろな情報をやり取りしたり、コントローラのプロパティを設定、上書きしたわけです。
それで、AutoRender が true (デフォルト)であれば、コントローラの render メソッドが呼ばれることになるのです。
コントローラはビューをレンダ~
文法的にこういう表現が合っているかどうかは置いといて、本当は controller クラスの render メソッド(755~802行)は View クラスのインスタンスを作って、その render メソッドを呼ぶのです。
この View クラス、コンストラクタ(265~278行)でコントローラのプロパティを引き継ぎます。(引き継ぐプロパティは242~246行) controller でビューの render メソッドを呼ぶ時、引数がないのでどうやって渡しているのかと思いましたが、ここで引き継がれていました。
render メソッド(364~406行)ではさらに _render メソッド(643~691行)を呼び出します。このメソッドでビューファイルをバッファに読み込み、その内容を返します。ついでに出てきたビューの内容をキャッシュしておきます。
今度はレイアウトを render します。(388→418~460行) _render にレイアウトを渡すのですが、ページタイトルだのスクリプトタグ(javascript とか css)を加えるだの、ページの最後にデバッグ情報をつける(Core の Debug が2以上のとき)などの作業がされます。あと大切なのはさっきのビューファイルの内容を $content_for_layout に取り込んで再出力します。
か~んせ~い
そして、View の render はビューを Controller の render に渡して、Controller の render は dispatcher にビューを渡して、echo して出・来・上・が・り、なのでした。
(最後だいぶはしょった?)
で、結局エラーを吐いていたサーバは、言うこときくようになったかというと、まだなのでした。うまく行ったらまた書きます。

1件のコメント
この投稿のコメント用フィード
2009/12/29 at 05:25
CakePHPのビューが表示されるまでの流れ « ブラジルの大地 « とっても! ちゅどん(雑記帳)
[...] CakePHPのビューが表示されるまでの流れ « ブラジルの大地 CakePHPのビューが表示されるまでの流れ « ブラジルの大地 [...]