超訳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);
    }
}

$post =
に注目だ。

これまでのindexでのfind('all')でなく、
findByIdとなっている。
一つの記事しか必要としないので、このような記述になるんだ。

public function index() {
     $this->set('posts', $this->Post->find('all'));    }
は、
Postsコントローラが、postsビューに、Postモデルのfind('all')を渡している,
という意味だった。

今回は、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>

indexから、タイトルをクリックしてみよう

記事が開けるはずだ。
こんな画面が出たら、OKだ。



次回は、記事の追加をアプリケーション上でできるようにしよう。

この記事でやったこと:

  • コントローラを改造して、記事の中身を見えるようにした