CakePHP の典型的なリクエスト

CakePHP の基本的な構成要素について既に考えました。ここからは、基本的なリクエストがあった場合、 個々のオブジェクトがそれをどう処理して完結させるのかということを調べてみましょう。 リクエストの例を元に続けます。例えば、リカルドさんが CakePHP アプリケーションの 「特注ケーキを今すぐ購入!」というリンクをクリックしたとしましょう。

Flow diagram showing a typical CakePHP request

典型的な CakePHP のリクエストを示すフローダイアグラム

図2 典型的な CakePHP リクエスト

黒 = 必要な要素、灰色 = 任意の要素、青 = コールバック

  1. リカルドさんが http://www.example.com/cakes/buy を指しているリンクをクリックすると、 ブラウザは、ウェブサーバにリクエストを送信します。

  2. Router が、URL を解析(parse)し、このリクエストのパラメータを取り出します。 このリクエストにおいてビジネスロジックに影響するコントローラ、アクション、その他の引数などです。

  3. リクエストされた URL は、Router によって、コントローラのアクション(コントローラクラスの 中にあるメソッド)にマップされます。この場合は、CakesController の buy() メソッドです。 コントローラのアクションロジックが実行される前には、コントローラの beforeFilter() コールバックが呼ばれます。

  4. コントローラは、アプリケーションのデータを取り出すためにモデルを使用することができます。 この例では、リカルドさんの最新の購入履歴をデータベースから取得するため、コントローラが モデルを使用します。この操作で、該当するモデルのコールバック、ビヘイビア、データソースが動作します。 モデルは使用しなくてもかまいませんが、CakePHP のすべてのコントローラは、初期状態では 少なくともひとつのモデルを使用する設定になっています。

  5. モデルがデータを取得すると、それはコントローラに送られます。 モデルのコールバックが設定されていれば、それが動作します。

  6. コントローラはコンポーネントを使用して、データをさらに調整したり、その他の操作 (セッション操作、認証、Eメールの送信など)ができます。

  7. コントローラがモデルとコンポーネントを使用してデータを準備し終えると、コントローラの set() メソッドを使用して、ビューにテータを渡します。 データが送信される前に、コントローラのコールバックがあれば実行されます。 ビューのロジックが動作すると、エレメントやヘルパーなどがあれば使用されます。 デフォルトでは、ビューは、レイアウトの内側に表示されます。

  8. コントローラのその他のコールバック(afterFilter など)があれば、 実行されます。完全に描画されたビューコードは、リカルドさんのブラウザに送信されます。