Kohanaに入門してみた(1)

ここしばらくCodeIgniterを触ってみていたのですが、そこから派生したKohanaというフレームワークが良さげ。
ソースも読みやすく、慣れればちっちゃなアプリをサクッと作れそう。

というわけで、フォーラムにもある簡易ブログを作ってみました。
テンプレートエンジンにはSmartyより早い(?)らしいDwooを組み込んで使用。

何はともあれKohanaをダウンロード
最新版の2.2をダウンロードしました。モジュールとかも一緒にダウンロードできるみたいですが、とりあえずスルー。

ダウンロードしたKohanaは、public_html/kohanaに配置しました。


DBとテーブルを作ります。

create database blog;
use blog;

create table entries (
  id int(11) not null primary key auto_increment,
  title varchar(128) not null,
  body text
) engine=MyISAM default charset=utf8 auto_increment=1;

create table comments(
  id int(11) not null primary key auto_increment,
  entry_id int(11) default null,
  body text,
  author varchar(100) default "anonymous"
) engine=MyISAM default charset=utf8 auto_increment=1;

insert into entries(title, body) values("First entry", "firstfirstfirst");
insert into entries(title, body) values("Second entry", "secondsecondsecond");


データベースの設定ファイル(system/config/database.php)を修正。
ユーザー名、パスワード、DB名を自分の環境に変えます。


続いて、Dwooの組み込み。
ダウンロードはこちらから

Kohanaへの組み込みはこちらの記事が参考になります。というかそのまま使わせてもらいました。
extensionsフォルダのcontroller.phpとview.phpをそれぞれ、application/libraryにコピーして、My_Controller.phpとMy_View.phpにリネーム(クラス名も同様)しました。
Dwooはmodules/dwoo/vendor/ 以下に配置。
後は、application/config/config.phpのモジュールに'dwoo'を追加すればdwooが使えるようになります。


ではでは最初の一覧ページを作ります。
最初にモデルを。

  • models/entry.php
class Entry_Model extends ORM {
  protected $has_many = array('comments');
}
  • models/comment.php
class Coment_Model extends ORM {
  protected $belongs_to = array('entry');
}


コントローラ。

  • controllers/blog.php
class Blog_Controller extends Controller {
  public function index() {
    $view = new View('blog');
    $view->entries = ORM::factory('entry')->orderby('id', 'desc')->find_all();
    $view->render(true);
  }
}

ビュー。

  • views/blog.tpl
<p>{html::anchor('blog/add_entry', 'Add entry')}</p>
{foreach $entries entry}
  <h1>{html::anchor('blog/view_entry/$entry->id', $entry->title)}</h1>
  <p>{$entry->body}</p>
{/foreach}


Dwoo使えばSmartyに慣れてる人でも同じように使えて便利ですね!
テンプレートエンジン使うと、ヘルパーが書きづらくなるような気もしますが。