CakePHP 1.2 動的ページでHello!World!! on さくらインターネット or coreserver

いよいよ本格的にCakePHPに触れていきます。ここではマニュアルにある簡単なブログをつくることをでHelloWorldに替えます。

スポンサードリンク

その前にMVCモデルを理解しておきます。またCakePHPは命名規則があります。

MVCモデル

  • データベース
    • posts・・・テーブル名、複数形
    • id
    • title or name・・・自動制御?
    • body
    • created・・・自動制御
    • modified or updated・・・自動制御
    • 小文字で記載
  • モデル
    • データベースとの結びつきを定義
    • Post
    • /app/models/post.php
    • バリデーションの定義
  • コントローラ
    • アクション(処理内容)を記述
    • PostController
    • /app/controllers/posts_controller.php
    • バリデーション(値の検証)の呼び出し
  • ビュー
    • テンプレートファイル
    • /app/views/posts/index.ctp
  • 呼び出し
    • www.hoge.com/contlollername/actionname/param1/param2

※ファイル名やテーブル名、カラム名などは命名規則に注意する(参考文献参照)
※それ以外にも以下のような注意がある(マニュアルより引用)

  • Cake で使用するテーブル名は、英語の複数形にしてください。”users”、 “authors” 、 “articles” などです。注意:対応するモデルの名前は単数形になります。
  • テーブルには、’id’ という名前の primary key がなければなりません。
  • テーブル同士を関連付けるのであれば、外部キーは、 ‘article_id’ のようにしてください。テーブル名の単数形にアンダースコア(アンダーバー)を付け、最後に ‘id’ を付けます。
  • テーブルに、’created’(作成) や ‘modified’(修正)という列があると、Cake はしかるべき時、フィールドにデータを自動的に書き込みます。

開発の流れ(例)

  1. テーブルの準備
  2. モデルの作成
  3. コントローラの作成(Index)
  4. ビューの作成(Index)
  5. コントローラの追加(Add)
  6. バリデーション(値の検証機能)の追加
  7. ビューの作成(Add)
  8. コントローラの追加(Del)
  9. ビューの編集(Index)
  10. コントローラの追加(Edit)
  11. ビューの作成(Edit)
  12. 必要に応じてルーティングの編集

※ルーティングを編集すると、/postsでアクセスしなければならないものを、/でのアクセスを/postsとみなすことができる

サンプルデータベースを準備

CREATE TABLE `posts` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(50) DEFAULT NULL,
`body` text,
`created` datetime DEFAULT NULL,
`modified` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=51 ;

サンプルデータの投入

INSERT INTO `posts` (`id`, `title`, `body`, `created`, `modified`) VALUES
(1, ‘タイトル’, ‘これは、記事の本文です。’, ‘2009-05-30 20:24:29’, NULL),
(2, ‘またタイトル’, ‘そこに本文が続きます。’, ‘2009-05-30 20:24:29’, NULL),
(3, ‘タイトルの逆襲’, ‘こりゃ本当に面白そう!うそ。’, ‘2009-05-30 20:24:29’, NULL);

app/models/post.php

<?php
class Post extends AppModel
{
var $name = ‘Post’;
var $validate = array(
‘title’ => array(
‘rule’ => array(‘minLength’, 1)
),
‘body’ => array(
‘rule’ => array(‘minLength’, 1)
)
);
}
?>

app/controllers/posts_controller.php

<?php
class PostsController extends AppController {
var $name = ‘Posts’;
function index() {
$this->set(‘posts’, $this->Post->find(‘all’));
}
function view($id = null) {
$this->Post->id = $id;
$this->set(‘post’, $this->Post->read());
}
function add() {
if (!empty($this->data)) {
if ($this->Post->save($this->data)) {
$this->flash(‘Your post has been saved.’,’/posts’);
}
}
}
function delete($id) {
$this->Post->del($id);
$this->flash(‘The post with id: ‘.$id.’ has been deleted.’, ‘/posts’);
}
function edit($id = null) {
$this->Post->id = $id;
if (empty($this->data)) {
$this->data = $this->Post->read();
} else {
if ($this->Post->save($this->data[‘Post’])) {
$this->flash(‘Your post has been updated.’,’/posts’);
}
}
}
}
?>

app/views/posts/index.ctp

<h1>Blog posts</h1>
<p><?php echo $html->link(“Add Post”, “/posts/add”); ?></p>
<table>
<tr>
<th>Id</th>
<th>Title</th>
<th>Created</th>
</tr>
<!– $post配列をループして、投稿記事の情報を表示 –>
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post[‘Post’][‘id’]; ?></td>
<td>
<?php echo $html->link($post[‘Post’][‘title’],’/posts/view/’.$post[‘Post’][‘id’]);?>
<?php echo $html->link(
‘Delete’,
“/posts/delete/{$post[‘Post’][‘id’]}”,
null,
‘Are you sure?’
)?>
<?php echo $html->link(‘Edit’, ‘/posts/edit/’.$post[‘Post’][‘id’]);?>         </td>
<td><?php echo $post[‘Post’][‘created’]; ?></td>
</tr>
<?php endforeach; ?>
</table>

app/views/posts/add.ctp

<h1>Add Post</h1>
<?php
echo $form->create(‘Post’);
echo $form->input(‘title’);
echo $form->input(‘body’, array(‘rows’ => ‘3’));
echo $form->end(‘Save Post’);
?>

app/views/posts/edit.ctp

<h1>Edit Post</h1>
<?php
echo $form->create(‘Post’, array(‘action’ => ‘edit’));
echo $form->input(‘title’);
echo $form->input(‘body’, array(‘rows’ => ‘3’));
echo $form->input(‘id’, array(‘type’=>’hidden’));
echo $form->end(‘Save Post’);
?>

app/views/posts/view.ctp

<h1><?php echo $post[‘Post’][‘title’]?></h1>
<p><small>Created: <?php echo $post[‘Post’][‘created’]?></small></p>
<p><?php echo $post[‘Post’][‘body’]?></p>

参考文献(主に基本)

参考文献(主に命名規則)

  • “CakePHPシステムデザイン(最新規約)” フォーラム – CakePHP Users in Japan :
    http://cakephp.jp/modules/newbb/viewtopic.php?forum=3&post_id=650&topic_id=369
  • CakePHP 規約ワードメーカー WordMaker for CakePHP Conventions :
    http://www.cpa-lab.com/tech2/inflects/
  • CakePHP Note:命名規則 :
    http://www.garacter.com/notes/CakePHP+Note:%E5%91%BD%E5%90%8D%E8%A6%8F%E5%89%87/pi:196
  • CakePHP 1.2 を設定してみる その2 ~命名規則の罠~ :
    http://wp.n-brid.com/2008/12/15/120/

関連記事

スポンサードリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です