CakePHPの典型的なリクエスト

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

Flow diagram showing a typical CakePHP request

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

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

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

  1. リカルドさんがリンクをクリックすると、それはhttp://www.example.com/cakes/buyを指しており、ブラウザは、Webサーバにリクエストを送信します。
  2. Routerが、URLを解析(parse)し、このリクエストのパラメータを取り出します。 このリクエストにおいてビジネスロジックに影響するコントローラ、アクション、その他の引数などです。
  3. リクエストされたURLは、Routerによって、コントローラのアクション(コントローラクラスの中にあるメソッド)にマップされます。 この場合は、CakesControllerのbuy()メソッドです。 コントローラのアクションロジックが実行される前には、コントローラのbeforeFilter()コールバックが呼ばれます。
  4. コントローラは、アプリケーションのデータを取り出すためにモデルを使用することができます。 この例では、リカルドさんの最新の購入履歴をデータベースから取得するため、コントローラがモデルを使用します。 この操作で、該当するモデルのコールバック、ビヘイビア、データソースが動作します。 モデルは使用しなくてもかまいませんが、CakePHPのすべてのコントローラは、初期状態では少なくともひとつのモデルを使用する設定になっています。
  5. モデルがデータを取得すると、それはコントローラに送られます。 モデルのコールバックが設定されていれば、それが動作します。
  6. コントローラはコンポーネントを使用して、データをさらに調整したり、その他の操作(セッション操作、認証、Eメールの送信など)を行ったりすることができます。
  7. コントローラがモデルとコンポーネントを使用してデータを準備し終えると、データは、コントローラのset()メソッドを使用することで、ビューに渡されます。 データが送信される前に、コントローラのコールバックがあれば実行されます。 ビューのロジックが動作すると、エレメントやヘルパーなどがあれば使用されます。 デフォルトでは、ビューは、レイアウト(layout)の内側に表示されます。
  8. コントローラのその他のコールバック(afterFilterなど)があれば、実行されます。 完全に表示されたコードは、リカルドさんのブラウザに表示されることになります。