CakePHPで高速Webアプリ開発

第5回 CakePHPで作るToDoアプリ(1)

この記事を読むのに必要な時間:およそ 4 分

コントローラの作成

コントローラ名は基本的に自由です。今回必要なのはタスク一覧を表示するコントローラーなので,コントローラ名はtasksとします。コントローラはapp/controllers/コントローラ名_controller.phpファイルに書きます。

タスク一覧表示に必要なコードを含んだコントローラがリスト2になります。

リスト2 コントローラ

<?php
// app/controllers/tasks_controller.php
class TasksController extends AppController {
  var $name = 'Tasks';
  var $uses = array('Task');
  function index() {
    $this->set('tasks', $this->Task->findAll(null, null, 'Task.created ASC'));
  }
}

1行ずつ解説します。

class定義

class TasksController extends AppController {

コントローラはPHPのクラスで,必ずAppControllerを継承させます。

var $name = 'Tasks';

⁠var $name」には,単語の頭文字が大文字のコントローラ名を定義します。

使用するモデルの定義

var $uses = array('Task');

⁠var $uses」には,コントローラで使用するモデルを定義します(モデルそのものについては後述します⁠⁠。

ちなみにCakePHPでは$usesを書かなくてもコントローラ名の単数形のモデルを自動で読み込む機能があります。tasksコントローラではTaskモデルになるので,実はこの記述は冗長といえます。しかし実際のアプリケーション開発ではコントローラ名に紐付いたモデルだけでは足りないことが多いので,より実践的なサンプルとしてあえて$usesで定義しました。個人的には自動で読み込む機能は半分忘れてしまってもよいのではないかと思います。

複数のモデルを使用したいときは単純に配列として複数列挙します。たとえばTaskモデルとExampleモデルを使用したいときは,

var $uses = array('Task', 'Example');

となります。

アクションの定義

function index() {
  $this->set('tasks', $this->Task->findAll(null, null, 'Task.created ASC'));
}

コントローラのアクションは,コントローラクラスのメソッドとして登録します。アクションへのURLは「/コントローラ名/アクション名」となります。アクション名を付けずにアクセスしたときは,デフォルト状態ではindexアクションが呼ばれます。

URLからアクセスできないメソッドを作成したいときは,メソッド名の先頭に「_(アンダースコア⁠⁠」を付けます。アンダースコアを付けずに作成したメソッドはすべてURLからアクセスできてしまうので,セキュリティーホールの原因になる可能性があります。アクションとして使用しないメソッドには必ずアンダースコアを付けておきましょう。

アクションの内容

$this->set('tasks', $this->Task->findAll(null, null, 'Task.created ASC'));

この行ではtasksテーブルから作成日順にデータを取得し,tasksという変数名でビューに渡しています。

$this->set() はビューに値を渡すメソッドです。引数は (変数名, 値)です。

$this->Task->findAll()は,Taskモデルからデータを取得しています。引数は (検索条件, 取得フィールド, ソート条件, etc...) です。検索条件がnullの場合はすべて,取得フィールドもnullの場合は同じくすべて取得します。

ソート条件はMySQLのOrder句の要領で記述します。条件は「モデル名.フィールド名 順序」で記述し,複数記述する際はカンマ区切りで記述します。たとえばstatusの降順でcreatedの昇順の際は「Task.status DESC, Task.created ASC」となります。

モデル作成前に実行してみる

コントローラが作成できたら,とりあえず実行してみましょう。/~gihyo/todo/tasks を開きます。

モデル作成前では,図1のような画面が表示されます。

図1 モデル作成前の画面

図1 モデル作成前の画面

画面の後半にモデルの作成場所と,雛形が表示されています。実際の開発時で「あれっ? モデルは作成してあるのに」と思ったときはこのエラー画面と比較してスペルミスなどを確認すると良いでしょう。

次にモデルの作成を行います。

著者プロフィール

秋田真宏(あきたまさひろ)

株式会社ロケットスタート エンジニア。個人ブログは「akiyan.com」。1981年生まれ。

URLhttp://www.akiyan.com/

著書