- 2009年8月28日 11:58 AM
- CakePHP
チュートリアルをいくつかやってみたけど、やっぱり自分が使う、使いたいようなものを作るつもりでやったほうがその過程で経験するものも格段に違うし、より良いアウトプットも出来るのではないかと思って、あらためて自分用の(自分だけが更新できる)ブログサービスをCakePHPで作ってみることにした。
DBとテーブルの用意
使用するデータベース名:cake
mysql> create database cake;
エントリ用テーブル:entries
(CakePHPの命名規則に従って、entryの複数形を用いた。これによってモデル名はEntryということになる)
MySQLモニターでテーブル「entries」を作成する。
mysql> create table entry(
-> id int null auto_increment primary key,
-> title varchar(255) not null,
-> content longtext not null,
-> created not null,
-> modified datetime not null);
テーブルのデータ構造を確認。
mysql> desc entries;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | | NULL | |
| content | longtext | NO | | NULL | |
| created | datetime | NO | | NULL | |
| modified | datetime | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
CakePHPを新しく展開
1.2の最新版cake_1.2.4.8284.tar.gzをUbuntu ServerのWebRootにて展開。そして「cblog」としてリネーム。
新しく作成するブログアプリケーションのディレクトリ
/var/www/cblog
以下二つをあらためて確認する。
1.mod_rewriteは有効になっている。
(CakePHPではこれを使用するのがデフォになっている)2.Apacheの設定で.htaccessが利用可能になっている。
http://IPアドレス/cblog/にアクセスすると、例によってエラーがいくつか出ているので、これを解消していく。
参照エントリ:CakePHP 1.2でブログチュートリアル[1]
エラーが消えてオールグリーンの状態になったところで次の段階へ。
モデルの作成
ブログのエントリーを格納するデータテーブル「entries」用に、「Entry」モデルを作成する。(ファイルの名前は単数形)
app/models/entry.php
コントローラの作成
ブログのエントリーのためのコントローラ「entries_controller.php」を作成する。(ファイルの名前は複数形_controller)
app/controllers/entries_controller.php
とりあえずEntriesコントローラのクラスを定義して、名前をつけた。
こんだけだとなんにも表示できないんで、エントリ一覧を表示するようにアクションをindexで設定した。(indexアクションはコントローラのデフォルトのアクションで、今回の例だと/cblog/entries/index/でアクセスできる)
set('entries', $this->Entry->find('all'));
}
}
コントローラはここまでにして、ここまでやった内容(/cblog/entries/index/にアクセスするとブログのエントリ一覧が全件表示される)をブラウザで表示できるように「ビュー」を次に作成する。
ビューの作成
Entriesコントローラ(entries_controller.php)の処理結果をブラウザで表示出来るように「ビュー」ファイルを用意する。命名規則から、このビューファイルは「/app/views/entries/index.ctp」となる。(なので、viewsディレクトリ内にentriesディレクトリを作成する)
app/views/entries/index.ctp
ブログエントリ一覧
- link($post['Entry']['title'], "/entries/view/".$post['Entry']['id']); ?>
(x)htmlのマークアップはあとであらためてちゃんとやるとして、とりあえず現状ではこんな感じ。(http://IPアドレス/cblog/entries/にアクセスすると)
エントリのタイトルと投稿日時だけが表示されている。エントリタイトルにはエントリ本文へのリンクが張られている。
エントリ本文も表示させたいのでリスト要素として次のPHPコードを追加。
これによってEntryモデル(entriesテーブル)のcontentフィールドの内容も表示されるようになった。
でも、これだとこの時点(エントリ一覧ページを見ている時点)で、どれも全文読めてしまうので、一覧としては意味がない。なので、このエントリ一覧ページではエントリ本文の文字数を制限して表示することにする。
CakePHPではもっとスマートに記述する方法があるのかもしれないけれど、ちょっと探しただけではなかなか見つからなかったので、普通にPHPのmb_substr()関数を利用することにした。さっき追加したリスト要素のPHPのコード部分を以下のように変更。
エントリ本文の冒頭から140文字までを表示することにした。
とりあえずここまで。
次は、エントリそのものを表示するのに必要なビューファイルを用意して、表示のためのアクションをentries_controller.phpに定義する予定。
秀和システム
売り上げランキング: 174026

初心者向け
深く書かれていて便利である
コメント:2
- regepan 2010年7月14日
テーブルのデータ構造を確認。
の部分ですが、
mysql> desc entries;
↓
mysql> desc entry;
ではないですか?
- admin 2010年8月29日
あー、すんません。そうかもしれません。
すっかり離れて忘れちゃってるんで即答できないですが。
トラックバック:0
- この記事のトラックバック URL
- http://showzine.info/blog/2009/08/cakephp%e3%81%a7%e3%82%aa%e3%83%ac%e5%b0%82%e7%94%a8%e3%83%96%e3%83%ad%e3%82%b0%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b-vol-1.html/trackback
- トラックバックの送信元リスト
- CakePHPでオレ専用ブログを作ってみる vol.1 - SHOWJIN*BLOG より



