cakePHPを使った掲示板作成メモ   no comments

Posted at 11:47 pm in computer,internet

phpでDBを使った定型的なアプリを作るにはCakePHPがいいと聞いたので試しています。

とりあえず掲示板的なものを作ってみました。

とはいえ1回はできたものの2回目は忘れてしまうので忘れないように自分用にメモ。
環境はWindows+PHP+MySQLです。
ここで作ったものをLinuxサーバーに移動してますので基本的にLinuxでも動くと思います。

1.cakePHPの導入

…省略。
基本的にwampserverで何とかしましたよ。
cakePHPはダウンロードして解凍。

C:\wamp\www\cakephp

に置きました。

Windowsなのでパーミッションのことは考えませんw
Apacheはmod_rewriteを有効にしておいた方がいいようです。

そして使うデータベース名に合わせてapp/config/database.phpを書き換えます。

var $default = array(
'driver' => 'mysql',
'connect'  => 'mysql_connect',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'encoding' => 'utf8',
'database' => 'bogus',
'prefix' => '',
);

これは悪い例ですねw

http://localhost/cakephp/にアクセスしてDBに接続できてるのを確認します。

2.テーブルの作成

さて、ここからはいきなり開発に入ります。

まず、MySQLのテーブルを作ります。
CakePHPの規約では複数形じゃないといけないらしいので

memos
にしておきます。照合順序は

utf8_unicode_ci
にしておきます。デフォルトでlatin1なんかになってると文字化けして死にます。

3.フィールドの作成

次にDBにデータの受け皿となるテーブルを作ります。
これももちろんphpMyAdminを使いますよ。

メモ書きなのでフィールドには

タイトル(title)
URL(url)
メモ本文(memo)

なんかを設定しておけばいい気がします。

あと主キーとして
id
というフィールドを設定しておく必要があるようデスので必ずこれも作ります。
そして、作成日として

created

更新日として

modified

というフィールドがあった方が便利(CakePHPで自動的に更新されるらしい)なようですのでこれも作ってきます。
どちらもdatetime型です。

適当かつ後で追加できるので失敗したら後で考えます。いい時代です。

4.phpのコード

データの受け皿ができたらCakePHPのコードを書いていきますよ。

CakePHPでは大きく分けてコントローラとモデルとビューという3つのファイルを作る必要があるようです。

モデルがデータの定義
コントローラが内部処理
ビューが画面表示

という処理をするようです。

まず、モデルを作ります。
モデルを作るところは/app/models以下になります。
具体的には

C:\wamp\www\cakephp\app\models\memo.php

です。
内容は

<?php
class Memo extends AppModel {
var $name = "Memo";
}

です。頭を大文字にするのも閉じないのも$nameを定義しているのも仕様みたいです。

次にコントローラを作成します。
コントローラは

C:\wamp\www\cakephp\app\controllers\memos_controller.php

というかんじで作成します。
名前はmemosのコントローラなのでmemos_controllerですね。

中身は


<?php
class MemosController extends AppController {
var $name = "Memos";
var $uses = array("Memo");
function index() {
$this->set("memos", $this->Memo->findAll(null, null, 'Memo.id DESC'));
}
}

みたいなかんじです。
DBのメモデータを全部取得するMemo->findAllを使って取得したデータを
$this->setでビューに渡してます。
このへんは組み込みメソッドがあるので簡単です。
3つめのパラメータは並び順ですね。SQLでいうところのORDER BYなんだと思います。

そしてビューを作成します。

ビューは
/app/views
にフォルダを作ってその中にファイルを作成します。

具体的には
C:\wamp\www\cakephp\app\views\memos

になります。
まず最初にトップページとなる

index.thtml

を作成します。

中身は


<?php
foreach ($memos as $memo) {
echo "<a href=\"".
$memo["Memo"]["url"]."\">".
$memo["Memo"]["title"]."</a><br>".
$memo["Memo"]["memo"].
$memo["Memo"]["created"]."<br><br>";
}
?>

みたいなかんじにしてみました。
データを最後まで表示するだけです。

ちなみにこちらは何もしませんがデータベースのデータは

$memo[“テーブル名”][“要素”]
として自動的に持ってくれるようです。
便利ですね。

これで
http://localhost/cakephp/memos
にアクセスするとDBのデータが入っていれば表示されます。

DBの中身を表示

DBの中身を表示

次にデータを追加したくなりますね。

というわけで
add.thtmlを作ることにします。
中身はこんなかんじです。


<?php
echo $form->create("Memo", array("action" => "add" )).
"タイトル:".
$form->text("Memo.title",
array("size"=>"15",
"error" => array("required" => "必ず入力"))).
"URL:".
$form->text("Memo.url",
array("size"=>"15",
"error" => array("required" => "必ず入力"))).
"<br>メモ:<br>".
$form->textarea("Memo.memo",
array("cols" => "60", "rows" => "3")).
"<br>".
$form->button("保存",array("type"=>"submit"));

$form->createでフォームを作成、
$form->textでテキストボックス(1行の)
$form->textでテキストエリア(複数行の)
$form->buttonでボタンのhtmlが書かれます。

が作られるようです。

次にコントローラにaddメソッドを追加します。
対応する名前のメソッドが必要なようです。

先ほど作った
C:\wamp\www\cakephp\app\controllers\memos_controller.phpに

add()を追加します。


function add() {
if (!empty($this->data)) {
$memo["Memo"]["title"] = $this->data["Memo"]["title"];
$memo["Memo"]["url"] = $this->data["Memo"]["url"];
$memo["Memo"]["memo"] = $this->data["Memo"]["memo"];
$this->Memo->save($memo);
$this->redirect("/memos");
}
}

こんなかんじでいいみたいです。

http://localhost/cakephp/memos/add

にアクセスすると間違ってないならフォームが表示されます。

add

add

データを入力して保存ボタンをクリックするとデータが追加され、表示されます。

追加された

追加された

そんなにコードも書いてないのにこれでメモ帳らしきものができました。

慣れるまでは大変なような気もしますが、慣れれば生産性高そうですね。
次はこのデータを修正と削除なんかできるようにしようと思います。

Written by bogus on 10月 2nd, 2008

Tagged with