A.9. Posts の追加

投稿をデータベースから読み、表示するところまでは格好良くできました。今度は、投稿を追加できるようにしてみましょう。.

まずは、 PostsController に add() アクションを追加するところから始めます。

例 A.7. /app/controllers/posts_controller.php (add アクションの追加)

<?php

class PostsController extends AppController
{
    var $name = 'Posts';

    function index()
    {
         $this->set('posts', $this->Post->findAll());
    }

    function view($id)
    {
        $this->Post->id = $id;
        $this->set('post', $this->Post->read());

    }

    function add()
    {
        if (!empty($this->data))
        {
            if ($this->Post->save($this->data))
            {
                $this->flash('Your post has been saved.','/posts');
            }
        }
    }
}

?>

add() アクションを簡単に説明してみます:もし、フォームデータが empty (空)でない場合は、そのデータを post モデルに保存します。もし何らかの理由で保存できなかった場合には、データバリデーションエラーを出し、ビューにそれらのエラーを表示します。

ユーザがアプリケーションからフォームを使って POST データを送信した場合、その情報は $this->params でアクセスできます。その内容を知りたい場合には、 pr() を使えます。 $this->data は、 $this->params['data'] の別名です。

呼んでいる $this->flash() 関数は、ユーザにメッセージを(flash レイアウトを使用して)1秒表示(flash)し、その後、他の URL (この場合は、 /posts)に転送するコントローラの関数です。DEBUG が 0 に設定されている場合、$this->flash() は自動的にリダイレクトしますが DEBUG が 0 より大きい場合には、flash レイアウトが表示され、メッセージをクリックした時にリダイレクトが実行されるようになります。

save() メソッドを呼ぶと、バリデーションエラーがチェックされ、もしエラーが起こった場合には何も保存されません。バリデーションエラーをチェックできる関数はいくつかあります。しかし、validateErrors() コールについては少しだけにしておき、次のデータバリデーションのセクションでは、ビューがどのような形になるかを説明します。