前の記事まででやったこと:
- CakePHPのざっくりとした説明
- CakePHPをダウンロードして、インストールする
- SQLデータベースを作成する
- CakePHPとデータベースを接続する
- データベースのセキュリティを設定する
- 記事のモデルを作成する
- 記事のコントローラを作成する
- 記事のビューを作成する
- 日本語の文字化けを直す
この記事でやること:
記事の一覧を表示した。
今回はコンロトーラに記事の本文が表示できるようにしよう。
app/Controller/PostsController.phpを開いて、以下の太線を追加しよう
<?php
class PostsController extends AppController {
public $helpers = array('Html', 'Form');
public function index() {
$this->set('posts', $this->Post->find('all'));
}
public function view($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}
$post = $this->Post->findById($id);
if (!$post) {
throw new NotFoundException(__('Invalid post'));
}
$this->set('post', $post);
}
}
class PostsController extends AppController {
public $helpers = array('Html', 'Form');
public function index() {
$this->set('posts', $this->Post->find('all'));
}
public function view($id = null) {
if (!$id) {
throw new NotFoundException(__('Invalid post'));
}
$post = $this->Post->findById($id);
if (!$post) {
throw new NotFoundException(__('Invalid post'));
}
$this->set('post', $post);
}
}
$post =
に注目だ。
これまでのindexでのfind('all')でなく、
findByIdとなっている。
一つの記事しか必要としないので、このような記述になるんだ。
public function index() {
$this->set('posts', $this->Post->find('all')); }
$this->set('posts', $this->Post->find('all')); }
は、
Postsコントローラが、postsビューに、Postモデルのfind('all')を渡している,
という意味だった。
今回は、Postsコントローラが、viewビューに、findByIdを渡している、
ということになる。
if(!$~)~はエラー処理だ。
じゃあ、viewビュー(ああ、ややこしい)を作ろう。
/app/View/Posts/view.ctpというファイルを作り、以下のように記述しよう
今回は、Postsコントローラが、viewビューに、findByIdを渡している、
ということになる。
if(!$~)~はエラー処理だ。
じゃあ、viewビュー(ああ、ややこしい)を作ろう。
/app/View/Posts/view.ctpというファイルを作り、以下のように記述しよう
<!-- File: /app/View/Posts/view.ctp -->
<h1><?php echo h($post['Post']['title']); ?></h1>
<p><small>Created: <?php echo $post['Post']['created']; ?></small></p>
<p><?php echo h($post['Post']['body']); ?></p>
<h1><?php echo h($post['Post']['title']); ?></h1>
<p><small>Created: <?php echo $post['Post']['created']; ?></small></p>
<p><?php echo h($post['Post']['body']); ?></p>
indexから、タイトルをクリックしてみよう
記事が開けるはずだ。
こんな画面が出たら、OKだ。
次回は、記事の追加をアプリケーション上でできるようにしよう。
この記事でやったこと:
- コントローラを改造して、記事の中身を見えるようにした