CakePHPで高速Webアプリ開発

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

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

第4回ではCakePHPでの開発環境を構築しました。今回からアプリケーション部分の開発にとりかかります。

開発するのはToDo管理アプリケーションです。今回は以下の作業を行います。

  • DBの設計と作成
  • コントローラの作成
  • モデルの作成
  • ビューの作成

この作業で実装される機能は以下になります。

  • タスク一覧の表示

このアプリケーション開発の前提として,DocumentRootは/home/gihyo/public_htmlで,URLはhttp://example.com/~gihyo/,CakePHPをセットアップしたディレクトリは/home/gihyo/public_html/todo,URLはhttp://example.com/~gihyo/todo/とします。

DBの設計と作成

まずはCakePHPに慣れるためのサンプルアプリケーションですので,機能は最小限とします。アプリケーションを利用する想定ユーザは1人だけとして,複数ユーザでの利用はとりあえずは想定外とします。

データベース名はtodo,タスクを管理するテーブル名はtasksとしました。テストデータを含むMySQL用のdumpが以下になります。

CREATE DATABASE todo;
use todo;
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE `tasks` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `content` text NOT NULL,
  `status` enum('yet','done') NOT NULL default 'yet',
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `status` (`status`),
  KEY `created` (`created`),
  KEY `modified` (`modified`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
INSERT INTO `tasks` (`id`, `content`, `status`, `created`, `modified`) VALUES 
(1, 'プログラマーズリファレンスガイドを一通り読む', 'done', '2007-08-20 00:00:00', '2007-08-21 01:00:00'),
(2, 'ブログチュートリアルを行う', 'yet', '2007-08-21 02:00:00', '2007-08-21 02:00:00'),
(3, 'CakePHP情報サイトをRSSリーダーに登録する', 'yet', '2007-08-21 05:00:00', '2007-08-21 05:00:00');

データベース名に合わせてapp/config/database.phpも書き換えますリスト1)。

リスト1 app/config/database.phpの書き換え

<?php
class DATABASE_CONFIG {
  var $default = array(
    'driver' => 'mysql',
    'connect' => 'mysql_connect',
    'host' => 'localhost',
    'login' => 'ここにDBのユーザー名',
    'password' => 'ここにDBのパスワード',
    'database' => 'todo',
    'prefix' => '',
  );
}

レンタルサーバなどでdb名が固定の場合は,それにあわせて変更してください。

tasksテーブルの解説

テーブル名は複数形

CakePHPの規約ではテーブル名は複数形です。この規約は絶対ではありませんが,規約から外れた場合は規約外であることを明示するコードを書き足す必要があるため,特別な理由がない限りは規約に沿っておくべきです。

複数形は単純に「s」が足されるわけではなく,英語として正しい複数形である必要があります。たとえばdiaryはdiariesとなります。

複数形がない単語は例外的にそのままになります。たとえば「news」などはテーブル名も「news」です。

プライマリキーはid

プライマリキーはidです。CakePHPの規約ではプライマリキーのフィールド名はidなので,新規開発時にはプライマリキーは必ずidとしておいたほうが良いでしょう。テーブル名と同様に規約外でも可能ですが,コードを書き足す必要があります。

タスク内容とステータス

タスク内容はcontentフィールドに入ります。タスクの状態は「未完了」「完了」の2つとして,enum型のstatusフィールドで「yet(まだ)」「done(完了)」で表現します。

作成日はcreated,更新日はmodified

タスクを作成した日はcreatedフィールドにdatetime型で入ります。更新日はmodifiedフィールドで,同様にdatetime型です。この2つのフィールド名はCakePHPの規約に沿っており,新規にレコードを作成したときやレコード内容を更新したときに自動で更新されます。何かと便利なフィールドですので,特別な理由がない限りは作成しておくと良いでしょう。

著者プロフィール

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

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

URLhttp://www.akiyan.com/

著書

コメント

  • Re:

    これで動いたら奇跡。

    ”おれ”さんのコメントがなきゃみんな動かないよ

    /view/index.thtmlじゃなくて
    /view/index.ctpにする

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

    あと文字化け対策も必要。
    これで、1.3で動いた。
    念のため、全部utf8で統一したほうがいいかも

    Commented : #9  はぁ? (2012/06/01, 17:20)

  • 記事が古いので仕方ない??

    CakePHP 1.3ではこのコード動かないですね。
    読み替えて書くしかないのですが、せめてサイトに注意書きがほしいですね。

    Commented : #8  hiro (2011/10/03, 04:54)

  • Re:

    文字化けの件、解決。

    CakePHP MySQL で文字化けを防ぐ設定
    http://blog.syuhari.jp/archives/141

    Commented : #7  おれ (2011/05/12, 00:43)

  • Re:

    はまったのでメモ。


    【解決済み】
    ・データベースのエラー(tasks_controller.php)
    $this->set('tasks', $this->Task->find('all'));
    //$this->set('tasks', $this->Task->find((null, null, 'Task.created ASC'));

    ・Viewがナイって言われる
    /view/index.thtmlじゃなくて
    /view/index.ctpにする


    【未解決】
    表示されたHTMLが文字化け

    Commented : #6  おれ (2011/05/12, 00:40)

  • 動かない

    動きません。

    Commented : #5  ddd (2011/04/04, 19:27)

1ページ(1/2)    

コメントの記入