@ CakePHP

コントローラ

コントローラは MVC の中で処理の起点です。モデルやビューに分割されたプログラムを状況に応じて呼び出し、アプリケーションに必要な機能を実装します。

シンプルな「コントローラ」だけの Web アプリケーションを作成して、コントローラの基本的なルールと機能を確認します。

コントローラの作成

「src」フォルダの「Controlle」フォルダの中に「Practices」という名前のコントローラを作成します。

cake3app\src\Controller\PracticesController.php

<?php
namespace App\Controller;

use App\Controller\AppController;

class PracticesController extends AppController
{
    public $name = 'Practices';

    public $autoRender = false;

    public function index()
    {
        echo '<h1>Practice</h1>';
        echo '<p>This is a practice of CakePHP.</p>';
    }
}

以下の URL で、アプリケーションにアクセスできます。

< http://localhost/cake3app/practices/ >

名前空間

名前空間は、クラス類の配置場所を階層的に整理する仕組みです。「namespace」を使って特定の場所に配置することで、クラス名の衝突によるトラブルを起こすことがなくなります。

CakePHP では、クラス類はすべて特定の名前空間に配置されます。

コントローラクラスの場合は、「App\Controller」という名前空間に配置します。

cake3app\src\Controller\PracticesController.php

namespace App\Controller;

AppControllerクラスのインポート

コントローラーは、src\Controller\AppController.php に定義された「AppController」というクラスを継承して定義します。この AppController は、コントローラのための基本的な仕組みを定義したクラスで、アプリケーションのすべてのコントローラーの親クラスとなります。「use」キーワードを使って AppController をインポートします。

cake3app\src\Controller\PracticesController.php

use App\Controller\AppController;

メンバー変数

コントローラクラスには、「コントローラで利用される値を保管するメンバー変数」と「アプリケーションから呼び出されるメソッド」を用意します。

$nameは、コントローラの名前を設定します。これによって、「PracticesController」というコントローラ名が指定されます。

cake3app\src\Controller\PracticesController.php

public $name = 'Practices';

$autoRenderは、ビューを使ってページをレンダリングする機能に関する設定をする変数です。$autoRender = true;ならば自レンダリングが ON、$autoRender = false;ならば OFF になります。

$autoRender = true;とすることで、CakePHP は「Template」フォルダ内からコントローラ名のフォルダを探し、その中からアクション名のテンプレートファイルを読み込んで自動的にレンダリングします。

public $autoRender = false;

indexメソッド

リクエストによってコントローラは指定されたがアクションは指定されなかったという場合、CakePHP の デフォルト動作では、そのコントローラのindex()メソッドを実行することになっています。 例えば、 http://www.example.com/apples/ へのリクエストは ApplesController のindex()メソッドを呼ぶようにマップされます。

cake3app\src\Controller\PracticesController.php

public function index()
    {
        echo '<h1>Practice</h1>';
        echo '<p>This is a practice of CakePHP.</p>';
    }