投稿をデータベースから読み、表示するところまでは格好良くできました。今度は、投稿を追加できるようにしてみましょう。.
まずは、 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() コールについては少しだけにしておき、次のデータバリデーションのセクションでは、ビューがどのような形になるかを説明します。