- 2009年8月29日 10:19 AM
- CakePHP
ビューアクションを定義する
エントリの記事本体のデータを取得するためのアクションを定義する。
既に作成済みの/app/controllers/entries_controller.phpに、view()として追記していく。
app/controllers/entries_controller.php
function view($id = null) {
// Entryモデルからレコードのidを取得して変数$idに代入
$this->Entry->id = $id;
// idにひもづく一件だけ取得すればいいのでread()
$this->set('post', $this->Entry->read());
}
ビューアクションのためのビューファイルを用意する
Entriesコントローラのview()アクションが実行された際に必要なビューファイルを用意する。
app/views/entries/view.ctp
投稿日時:
これでエントリ自体を表示することが出来た。
でも、これだとトップページ(本ブログの場合は、エントリ一覧を表示するページ/cblog/entries/がトップということになっている)へのリンクがなくて不便なので、コンテンツ上部にリンクテキストを配置する。(h1タグ部分が追記部分)
app/views/entries/view.ctp
オレ専用ブログHomeへ
投稿日時:
カテゴリ分け
次は新規投稿機能の実装だと思ったら、そうだ、カテゴリ分け出来るようにしたいんだったって思い出したので、テーブル「entries」にそれ用の「category」フィールドを追加した。これでいいんだよな?多分。
mysql> alter table entries add category varchar(255) after content;
新規投稿機能の実装
Entriesコントローラ(entries_controller.php)に新規投稿機能を実現するための新しいアクション「add()アクション」を追加する。
app/controllers/entries_controller.php
function add() {
if(!empty($this->data)) {
$this->Entry->save($this->data);
}
}
そして、このadd()アクションを実行した際に利用されるビューファイルをapp/views/entries/add.ctpとして用意する。このビューファイルには投稿フォームの内容が表示されることになる。
app/views/entries/add.ctp
Home
新規投稿
=$form->create(null, array('type'=>'POST', 'action'=>'')) ?>
タイトル:=$form->text('Entry.title') ?>
内容:=$form->textarea('Entry.content') ?>
カテゴリ:=$form->text('Entry.category') ?>
=$form->end("投稿する") ?>
この新規投稿画面にはブラウザでhttp://IPアドレス/cblog/entries/add/でアクセス出来るようになる。
テスト投稿してみると無事投稿出来た。でも、投稿後も投稿フォームページに留まっているので、これを投稿後はエントリ一覧ページへ遷移するようにリダイレクトの処理を追加することにする。
app/controllers/entries_controller.php
function add() {
if(!empty($this->data)) {
$this->Entry->save($this->data);
$this->redirect('.');
}
}
これで投稿後はエントリ一覧ページに遷移するようになった。でも、よく見るとエントリ一覧が「昇順」になっていたので、やっぱり新しい投稿が上に来るのが良いから、これを「降順」に変更する。find(‘all’)にオプションをつけてfind(‘all’, array(‘order’ => ‘Entry.id desc’))にする。
app/controllers/entries_controller.php
function index() {
$data = $this->Entry->find('all', array('order' => 'Entry.id desc'));
$this->set('data', $data);
}
でも、これまでに書いてきたコードだとビューファイルにおいてエラーが出るので、内容をけっこう大幅に書き換えた。
app/views/entries/index.ctp
ブログエントリ一覧
";
echo "
これまでは$postからデータを取り出していたのを(これはCakePHPのサイトにあったチュートリアルをまんま真似ていた)$data[$i]に変更して、これを$arrに代入し、出力させたい所で$arr['モデル名']['データフィールド名']で取り出している。
あ、昨日追加した「カテゴリ」フィールドを表示してなかったので、これも追加して表示するようにする。次の一行を追加。
app/views/entries/index.ctp
echo "
ここまでの段階でエントリ一覧ページはこんな感じ。
秀和システム
売り上げランキング: 174026

初心者向け
深く書かれていて便利である
コメント:0
トラックバック:1
- この記事のトラックバック 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-2.html/trackback
- トラックバックの送信元リスト
- CakePHPでオレ専用ブログを作ってみる vol.2 - SHOWJIN*BLOG より
- pingback - akiyan連載のCakePHPチュートリアルのコードを直してみる - O2 Project より 2010年5月17日
[...] 参考にしたサイト一覧 CakePHPでオレ専用ブログを作ってみる vol.2 – SHOWJIN*BLOG [...]

