3.5.1 はじめに

コントローラは、アプリケーションのロジック部分の管理に用いられます。たいていの場合、コントローラは、単一モデルのロジックの管理に使用されます。例えば、オンラインのパン屋のためのサイトを作っている場合には、RecipesController(レシピコントローラ)とIngredientsController(材料コントローラ)を作って、レシピと材料について管理することができます。CakePHPでは、コントローラ名は扱うモデルに基づいたものになり、複数形です。

Recipeモデルは、RecipesControllerによって扱われ、ProductモデルはProductsControllerによって扱われる、などです。

アプリケーションの各コントローラは、CakePHPのAppControllerクラスを継承しています。AppControllerは、コアのControllerクラスを継承しています。AppControllerクラスは、/app/app_controller.phpに定義することができ、アプリケーション内のすべてのコントローラが共有して使えるメソッドを書き込んでおくことができます。AppControllerコントローラが継承しているControllerクラスは、CakePHPの標準ライブラリです。

コントローラには、通常、actions(アクション)と呼ばれるメソッドをいくつでも書き込むことができます。アクションは、ビューを表示するために使用されるコントローラのメソッドです。アクションは、コントローラの中のひとつのメソッドのことです。CakePHPのディスパッチャ(dispatcher)は、コントローラのアクションに対応しているURLが呼ばれた時にアクションを呼び出します。オンラインのパン屋の例に戻ると、RecipesControllerの中には、view()、share()、search()、といったアクションが含まれているかもしれません。そのコントローラは、/app/controllers/recipes_controller.phpという場所にあることになり、次のようなコードを含みます。

    <?php
    
    # /app/controllers/recipes_controller.php

    class RecipesController extends AppController {
        function view($id)     {
            //アクションのロジックがここに来ます。
        }

        function share($customer_id, $recipe_id) {
            //アクションのロジックがここに来ます。
        }

        function search($query) {
            //アクションのロジックがここに来ます。
        }
    }

    ?>
  1. <?php
  2. # /app/controllers/recipes_controller.php
  3. class RecipesController extends AppController {
  4. function view($id) {
  5. //アクションのロジックがここに来ます。
  6. }
  7. function share($customer_id, $recipe_id) {
  8. //アクションのロジックがここに来ます。
  9. }
  10. function search($query) {
  11. //アクションのロジックがここに来ます。
  12. }
  13. }
  14. ?>

アプリケーション内でコントローラを効果的に使用するために、CakePHPのコントローラが提供しているコアの属性とメソッドについてまとめてみます。