Kohanaに入門してみた(2)
簡易ブログのエントリ一覧は表示できたので、次はエントリ追加、エントリ詳細、コメント追加をできるようにします。
エントリ追加。
- controllers/blog.php
public function add_entry() { $_POST = new Validation($_POST); $_POST->add_rules('title', 'required'); if($_POST->validate()) { $entry = new Entry_Model; $entry->title = $_POST['title']; $entry->body = $_POST['body']; $entry->save(); url::redirect('blog'); } else { $view = new View('add_entry'); $view->errors = $_POST->errors(); $view->render(true); } }
- views/add_entry.tpl
<h1>Add entry</h1> {if count($errors) > 0} {foreach $errors error} <p>{$error}</p> {/foreach} {/if} {form::open('blog/add_entry', array('method'=>'post'))} <dl> <dt>Title</dt> <dd> {form::input('title')} </dd> <dt>Contents</dt> <dd> {form::textarea('body')} </dd> <dl> {form::submit('submit', 'Submit')}
エントリ詳細
- controllers/blog.php
public function view_entry($id) { $entry = ORM::factory('entry', (int)$id); $view = new View('view_entry'); $view->entry = $entry; $view->comments = $entry->comments; $view->render(true); }
- views/view_entry.tpl
{html::anchor('blog', 'Entry list')} <hr /> <h1>{$entry->title}</h1> <p>{$entry->body}</p> <p>{html::anchor('blog/add_comment/$entry->id', 'Add comment')}</p> <hr /> {foreach $comments comment} <p><strong>{$comment->author}</strong><br /> {$comment->body}</p> {/foreach}
コメント追加
- controllers/blog.php
public function add_comment($id) { $_POST = new Validation($_POST); $_POST->add_rules('body', 'required'); if($_POST->validate()) { $entry = ORM::factory('entry', (int)$_POST['entry_id']); $comment = new Comment_Model; $comment->entry_id = $entry->id; $comment->author = $_POST['author']; $comment->body = $_POST['body']; $comment->save(); url::redirect('blog/view_entry/' . (int)$_POST['entry_id']); } else { $view = new View('add_comment'); $view->entry_id = $id; $view->errors = $_POST->errors(); $view->render(true); } }
- views/add_comment.tpl
<h1>Add comment</h1> {if count($errors) > 0} {foreach $errors error} <p>{$error}</p> {/foreach} {/if} {form::open('blog/add_comment/$entry_id', array('method'=>'post'))} <dl> <dt>Author</dt> <dd> {form::input('author')} </dd> <dt>Contents</dt> <dd> {form::textarea('body')} </dd> <dl> {form::hidden("entry_id", $entry_id)} {form::submit('submit', 'Submit')}
とりあえず動くようになっただけ。
I/Oチェックとバリデーションの使い方とかもっとちゃんとドキュメント見ないと駄目だ。。。
とりあえず、次はログインコントローラを作りながらその辺もやってみたいと思います。