閲覧総計:3977  (本日:1  昨日:0)

CakePHPの入門者トレーニングとして、gihyo.jpサイトの「CakePHPで高速Webアプリ開発」
がすばらしい。しかし、このサンプル例題はCakePHP1.1で解説されている為、CakePHP1.2
では少し異なるコード表現になりそうな所がある。
サンプル例題「ToDoアプリ」をCakePHP1.2でトレースしてみた。 09/01/01

【目次】(項目をクリックすると、そこに飛べます)


DBの設計と作成

(原典)http://gihyo.jp/dev/serial/01/cakephp/0005?page=1

データベースMySQLにDB操作アプリphpMyAdminを使用し、データベースtodoとデータ
テーブルtasksを作成。
私の場合は、公開用レンタルサーバの文字コードがEUC(ujis)なので、ujisに書換えが
必要。

↓テーブルtasks作成とデータ入力SQL

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=MyISAM  DEFAULT CHARSET=ujis 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');
LH_DB_todo作成Admin画面.JPGLH_DB_todo_tasks作成画面.JPGLH_DB_todo_tasksデータ表示画面.JPG
データベースtodo作成(EUC)データテーブルtasksのSQLでの作成完成を確認

↓app/config/database.phpの書き換え(私の場合はEUC(ujis))

class DATABASE_CONFIG {

    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => '',
        'database' => 'todo',
        'prefix' => '',
        'encoding' => 'ujis'
    );
}
?>

コントローラの作成

(原典)http://gihyo.jp/dev/serial/01/cakephp/0005?page=2

コントローラを作成します。
/cake/app/controllers/tasks_controller.php

<?php
// app/controllers/tasks_controller.php
class TasksController extends AppController { //AppControllerを継承
  var $name = 'Tasks'; //controller名を定義(頭が大文字であることを覚える)
  var $uses = array('Task'); //使用するmodel名を指定
  
  function index() { //indexアクションの定義
    $this->set('tasks', $this->Task->find('all', array('order'=>'Task.created ASC')));
    //モデルTaskのデータ全てを変数tasksに格納しビューに渡す
  }
}

●CakePHP1.2からfindAll()が非推奨表現になり、汎用性のあるfind()が推奨された。
書式の違いを示す。
<1.1>
findAll(null, null, 'Task.created ASC');
<1.2>
find('all', array('order'=>'Task.created ASC'));

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

modelの作成前に
http://localhost/cake/tasks とタイプして実行してみる。

●CakePHP1.2では、テキストの異なる「View Missing」の画面が表示されます。
CakePHP1.2では、modelがない場合は自動判定してプログラムを起動してくれる様に
なった事が原因です。
●また、CakePHP1.2は、1.1と比較して画面デザインが大きく変わりましたね。
LH_cake_tasks_View不足エラー画面.JPG

モデルの作成

(原典)http://gihyo.jp/dev/serial/01/cakephp/0005?page=3

モデルを作成します。
/cake/app/models/task.php

<?php
// app/models/task.php
class Task extends AppModel { //AppModelクラスを継承
  var $name = 'Task'; //モデル名の定義(頭が大文字であることを覚える)
}

viewの作成前に
http://localhost/cake/tasks とタイプして実行してみる。
modelの作成前と同じ画面です。
LH_cake_tasks_View不足エラー画面_0.JPG

ビューの作成

viewを作成します。
/cake/app/views/tasks/index.ctp

<table>
  <tr>
    <th>Id</th>
    <th>タスク内容</th>
    <th>状態</th>
    <th>作成日</th>
  </tr>
  <?php foreach ($tasks as $task) { ?>
    <tr>
      <td><?php echo h($task['Task']['id']) ?></td>
      <td><?php echo h($task['Task']['content']) ?></td>
      <td><?php echo h($task['Task']['status']) ?></td>
      <td><?php echo h($task['Task']['created']) ?></td>
    </tr>
  <?php } ?>
</table>

●CakePHP1.2からviewのテンプレートファイルの拡張子が「.ctp」(Cake TemPlate?)に
変更になってます。1.1時代は「.thtml」でした。
●ビューファイルを保存する時は、設定した日本語文字コードタイプで保存すること。
(私の場合はEUCタイプです。)

実行画面 http://localhost/cake/tasks
LH_cake_tasks_index画面.JPG


選択肢 投票
参考になった 11  
ふつう 0  
参考にならなかった 0  

添付ファイル: fileLH_cake_tasks_index画面.JPG 623件 [詳細] fileLH_cake_tasks_View不足エラー画面_0.JPG 624件 [詳細] fileLH_cake_tasks_View不足エラー画面.JPG 671件 [詳細] fileLH_DB_todo_tasksデータ表示画面.JPG 655件 [詳細] fileLH_DB_todo_tasks作成画面.JPG 678件 [詳細] fileLH_DB_todo作成Admin画面.JPG 650件 [詳細]

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-21 (水) 05:44:23 (1710d)