たろマーク (はてなブックマーク)
-
[ javascript ][ test ] Rspec ライクな Javascript テストフレームワーク
-
[ ezpublish ] eZ のデータソースを CakePHP で使うためのアダプタ。Rails とか Django にこれを移植すれば!
-
[ iquestioner ]
-
[ ruby ]
-
[ lazy-people ] おつでしたー
■ CC::Resources と CC::RequestToken を一緒に使う
追記
Controller::Resources の作者に対応してもらったよ!ありがとう!
ここから元の記事
Catalyst::Plugin::RequestToken が廃止対象になって Catalyst::Controller::RequestToken が出てからだいぶ経ちましたが、Resources とどう組み合わせて使おうか悩んでいて、こうやったら一緒に使えるなぁと思ったのでやってみた。
package MyApp::Base::Controller::Resources;
use strict;
use warnings;
use base qw(Catalyst::Controller::Resource Catalyst::Controller::RequestToken);
use Catalyst::Utils;
sub setup_collection_actions {
my $self = shift;
my $maps = Catalyst::Utils::merge_hashes(
$self->{collection} || {},
{ list => { method => 'GET', path => '', token => 'create' },
do_create => { method => 'POST', path => '', token => 'validate' },
create => { method => 'GET', path => 'new', token => 'create' },
}
);
$self->setup_actions( collection => $maps );
}
sub setup_member_actions {
my $self = shift;
my $maps = Catalyst::Utils::merge_hashes(
$self->{member} || {},
{ show => { method => 'GET', path => '', token => 'create' },
do_update => { method => 'POST', path => 'update', token => 'validate' },
update => { method => 'GET', path => 'update', token => 'create' },
do_destroy => { method => 'POST', path => 'delete', token => 'validate' },
destroy => { method => 'GET', path => 'delete', token => 'create' },
}
);
$self->setup_actions( member => $maps );
}
sub _construct_action_attributes {
my ( $self, $chained_from, $map ) = @_;
return (
'Resource',
'Args(0)',
"Chained('$chained_from')",
"Method('$map->{method}')",
exists $map->{path} ? "PathPart('$map->{path}')" : 'PathPart',
( exists $map->{token} && $map->{token} eq 'create' ) ? 'CreateToken'
: ( exists $map->{token} && $map->{token} eq 'validate' ) ? 'ValidateToken'
: ''
);
}
_construct_action_attributes を上書きして、$map->{token} に入っている値を見て、CreateToken か ValidateToken アトリビュートを付加するようにしてます。
後は setup_(collection|member)_actions で token の指定するだけ。
list と show を CreateToken にしてるのは、一覧画面とか詳細画面自体にフォームがある場合があるからです。
トラックバック
このエントリーのトラックバックURL:
http://vkgtaro.jp/cgi-bin/mt/mt-tb.cgi/642




