2011-04-02
CuteというWebフレームワークを作った
俺々フレームワークを作ってみたかったので、先人の知恵をいろいろ拝借する感じでやってみた。
いろいろ足りないものがあるけど、まあとりあえず動くところまで。自分の好み的に、わりといい感じになりつつあるので、今後は、個人用プロジェクトにはこれを使っていきたい。
いちファイルでこんなん書いたら適当に動く感じ。
package Example::Cute::Default; use strict; use warnings; use Cute; sub title { my ($self, $suffix) = @_; my $title = 'Hello, Cute!'; $title .= " ($suffix)" if $suffix; $title; } get '/' => sub { my ($self, $ctx) = @_; }; get '/foo' => sub { my ($self, $ctx) = @_; $ctx->res->content($self->title('/foo')); }; get '/bar/baz' => sub { my ($self, $ctx) = @_; $ctx->stash( title => $self->title('/bar/baz'), list => [ { value => 'foo' }, { value => 'bar' }, { value => 'baz' }, ], ); }; get '/{year:[0-9]{4}}/{month:[0-9]{2}}' => sub { my ($self, $ctx) = @_; $ctx->response->set_template('path_query.html'); $ctx->stash( year => $ctx->req->path_query('year'), month => $ctx->req->path_query('month'), ); }; !!1;
んでもって、それだと規模が大きくなると見通しが悪くなりそうなので、Controller別にも分けられるようにもしてみた。::Contoler::Hogeみたいなのの中では、get/post/put/deleteが、自動的に/hoge以下を指すようになる。
package Example::Cute::Default::Controller::Hoge; use strict; use warnings; use Cute 'Example::Cute::Default'; get '/' => sub { my ($self, $ctx) = @_; $ctx->res->content($self->title('/hoge')); }; get '/fuga' => sub { my ($self, $ctx) = @_; $ctx->stash( title => $self->title('/hoge/fuga'), list => [ { value => 'foo' }, { value => 'bar' }, { value => 'baz' }, ], ); }; !!1;
上の例は以下から見ることができる。
トラックバック - http://d.hatena.ne.jp/antipop/20110402/1301768848
リンク元
- 102 http://reader.livedoor.com/reader/
- 80 http://b.hatena.ne.jp/
- 63 http://b.hatena.ne.jp/hotentry/it
- 56 http://twitter.com/
- 50 http://www.cn-tc.com/hatena/new
- 38 http://www.ig.gmodules.com/gadgets/ifr?exp_rpc_js=1&exp_track_js=1&url=http://www.hatena.ne.jp/tools/gadget/bookmark/bookmark_gadget.xml&container=ig&view=default&lang=ja&country=JP&sanitize=0&v=548d4fa45df64bf0&parent=http://www.google.co.j
- 34 http://b.hatena.ne.jp/entrylist/it
- 29 http://b.hatena.ne.jp/entrylist
- 26 http://www.google.co.jp/search?q=はてな+Ridge&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja-JP-mac:official&hl=ja&client=firefox-a
- 26 http://www.google.com/reader/view/

