2007-05-14
Catalyst-Plugin-CRUD (4)
Perl |
先ほどのエントリーまでで、モデル・ビューを作ったので、最後にコントローラです。といっても基本的なコントローラはもう作られていますので、そんなに必要なことはありません。
TinyURL/lib/TinyURL.pm の修正
以下のように修正します。
use Catalyst qw/-Debug ConfigLoader I18N CRUD Static::Simple/;
TinyURL/lib/TinyURL/Controller/TinyURL.pm の修正
自動的に作られたソースは以下のようになっていると思います。
package TinyURL::Controller::TinyUrl; use strict; use warnings; use base 'Catalyst::Controller'; use Class::Trigger; sub default : Private { my ( $self, $c ) = @_; $c->forward('list'); } sub create : Local { my ( $self, $c ) = @_; $c->create($self); } sub read : Local { my ( $self, $c ) = @_; $c->read($self); } sub update : Local { my ( $self, $c ) = @_; $c->update($self); } sub delete : Local { my ( $self, $c ) = @_; $c->delete($self); } sub list : Local { my ( $self, $c ) = @_; $c->list($self); } sub setting { my ( $self, $c ) = @_; my $hash = { 'name' => 'tinyurl', 'type' => 'CDBI', 'model' => 'CDBI::TinyUrl', 'primary' => 'id', 'columns' => [qw(disable long_url)], 'default' => '/tinyurl/list', 'template' => { 'prefix' => 'template/tinyurl/', 'create' => 'create.tt', 'read' => 'read.tt', 'update' => 'update.tt', 'delete' => 'delete.tt', 'list' => 'list.tt' }, }; return $hash; } 1;
- たとえば、新規作成・参照のみ可能で、他のアクションは無効にしたいときは、read, update, delete をコメントアウトするだけです
- setting の中身は見れば大体わかると思います
- $c が渡ってくるので、なにかの条件で返す値を変えるようなこともできます
- ビューに ClearSilver を使う場合は .tt を .cs に変えてください
入力した値をエラーチェックする
とりあえず空の URL は登録させたくないので、エラーチェックを追加しましょう。
- TinyURL/lib/TinyURL/Controller/TinyURL.pm に以下のように追加します
- $hash の中に入力値が入っています
- $c->stash->{create}->{error} に値を入れることで、入力画面にエラーが表示されます
__PACKAGE__->add_trigger(create_check => \&create_check); sub create_check { my ( $self, $c, $hash ) = @_; if (!exists $hash->{long_url} or length($hash->{long_url}) == 0) { $c->stash->{create}->{error} = 'URLが空っぽです。'; } }
他にどんなトリガーがあるかは、Catalyst::Controller::CRUD を読んでくださいね。
エラーメッセージの国際化
先ほどの例では、エラーメッセージが日本語だったので、国際化に対応させてみます。
- 以下のように修正します
$c->stash->{create}->{error} = $c->language('ERROR_URL_IS_NULL');
- TinyURL/lib/TinyURL/I18N/ja.po に以下の文言を追加します
msgid "ERROR_URL_IS_NULL" msgstr "URLが空っぽです。"
- TinyURL/lib/TinyURL/I18N/en.po に以下の文言を追加します
msgid "ERROR_URL_IS_NULL" msgstr "Error: URL is null."
最終的な TinyURL/lib/TinyURL/Controller/TinyURL.pm
package TinyURL::Controller::TinyUrl; use strict; use warnings; use base 'Catalyst::Controller'; use Class::Trigger; sub default : Private { my ( $self, $c ) = @_; $c->forward('create'); } sub create : Local { my ( $self, $c ) = @_; $c->create($self); } __PACKAGE__->add_trigger(create_check => \&create_check); sub create_check { my ( $self, $c, $hash ) = @_; if (!exists $hash->{long_url} or length($hash->{long_url}) == 0) { $c->stash->{create}->{error} = $c->language('ERROR_URL_IS_NULL'); } } sub list : Local { my ( $self, $c ) = @_; $c->list($self); } sub setting { my ( $self, $c ) = @_; my $hash = { 'name' => 'tinyurl', 'type' => 'CDBI', 'model' => 'CDBI::TinyUrl', 'primary' => 'id', 'columns' => [qw(disable long_url)], 'default' => '/tinyurl/list', 'template' => { 'prefix' => 'template/tinyurl/', 'create' => 'create.tt', 'read' => 'read.tt', 'update' => 'update.tt', 'delete' => 'delete.tt', 'list' => 'list.tt' }, }; return $hash; } 1;
コメントを書く
トラックバック - http://d.hatena.ne.jp/Bayside/20070514/p1
リンク元
- 25 http://reader.livedoor.com/reader/
- 15 http://mixi.jp/view_diary.pl?url=http://d.hatena.ne.jp/Bayside/20070512/p1&owner_id=272369
- 8 http://zefard.cocolog-nifty.com/labo/2007/05/rapidsvn_094_13de.html
- 6 http://search.yahoo.co.jp/search?p=RapidSVN+日本語&ei=UTF-8&fr=top_v2&x=wrt
- 5 http://www.google.co.jp/search?hl=ja&client=firefox&rls=org.mozilla:ja:official&hs=tZW&q=PostgreSQL 8.2 rpm&btnG=Google+検索&lr=lang_ja
- 5 http://www.google.co.jp/search?hl=ja&q=RapidSVN&btnG=Google+検索&lr=lang_ja
- 5 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&num=10&q=RapidSVN
- 3 http://72.14.253.104/search?q=cache:WEWS-6WULy8J:d.hatena.ne.jp/Bayside/archive+linux+nt330&hl=ja&ie=UTF-8
- 3 http://d.hatena.ne.jp/tomyhero/20070511/1178873959
- 3 http://www.google.co.jp/search?sourceid=navclient&aq=t&hl=ja&ie=UTF-8&rls=GGLD,GGLD:2004-44,GGLD:ja&q=RapidSVN+日本語化
