| Catalyst-Controller-Resources documentation | Contained in the Catalyst-Controller-Resources distribution. |
Catalyst::Controller::Resources - Catalyst Collection Resources Controller
package MyApp::Controller::Articles;
use base 'Catalyst::Controller::Resources';
# GET /articles
sub list {
my ($self, $c) = @_;
}
# POST /articles
sub create {
my ($self, $c) = @_;
}
# GET /articles/{article_id}
sub show {
my ($self, $c, $article_id) = @_;
}
# PUT /articles/{article_id}
sub update {
my ($self, $c, $article_id) = @_;
}
# DELETE /articles/{article_id}
sub destroy {
my ($self, $c, $article_id) = @_;
}
# GET /articles/new
sub post {
my ($self, $c) = @_;
}
# GET /articles/{article_id}/edit
sub edit {
my ($self, $c, $article_id) = @_;
}
package MyApp::Controller::Articles;
use base 'Catalyst::Controller::Resources';
# ...
package MyApp::Controller::Comments;
use base 'Catalyst::Controller::Resources';
__PACKAGE__->config(belongs_to => 'Articles');
# GET /articles/{article_id}/comments
sub list {
my ($self, $c, $article_id) = @_;
}
# POST /articles/{article_id}/comments
sub create {
my ($self, $c, $article_id) = @_;
}
# GET /articles/{article_id}/comments/{comment_id}
sub show {
my ($self, $c, $article_id, $comment_id) = @_;
}
# PUT /articles/{article_id}/comments/{comment_id}
sub update {
my ($self, $c, $article_id, $comment_id) = @_;
}
# DELETE /articles/{article_id}/comments/{comment_id}
sub destroy {
my ($self, $c, $article_id, $comment_id) = @_;
}
# GET /articles/{article_id}/comments/new
sub post {
my ($self, $c, $article_id) = @_;
}
# GET /articles/{article_id}/comments/{comment_id}/edit
sub edit {
my ($self, $c, $article_id, $comment_id) = @_;
}
e.g.) Catalyst::Controller::RequestToken
In your controller:
package MyApp::Controller::Foo;
use base qw(
Catalyst::Controller::Resources
Catalyst::Controller::RequestToken
);
sub post :CreateToken {
my ($self, $c) = @_;
$c->stash->{template} = 'foo/post.tt';
$c->forward($c->view('TT'));
}
sub create :ValidateToken {
my ($self, $c) = @_;
if ($self->validate_token) {
$c->res->body('complete.');
}
else {
$c->res->body('invalid operation.');
}
}
post.tt:
<html>
<body>
<form action="[% c.uri_for('/foo') %]" method="post">
<input type="hidden" name="_token" values="[% c.req.param('_token') %]"/>
<input type="submit" name="submit" value="complete"/>
</form>
</body>
</html>
This version works under Catalyst 5.8 (catamoose). If you use this module with Catalyst 5.7, please check out version 0.04.
This controller defines HTTP verb-oriented actions for collection resource, inspired by map.resources (Ruby on Rails).
In your controller:
package MyApp::Controller::Books; use base 'Catalyst::Controller::Resources';
This base controller exports Catalyst action attributes to your controller, and setup collection resource as /books.
called by GET /collection request
called by POST /collection request
called by GET /member/{member_id} request
called by PUT /member/{member_id} request
called by DELETE /member/{member_id} request
called by GET /collection/new request
called by GET /member/{member_id}/edit request
NAKAGAWA Masaki <masaki@cpan.org>
Daisuke Murase <typester@cpan.org>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Catalyst-Controller-Resources documentation | Contained in the Catalyst-Controller-Resources distribution. |
package Catalyst::Controller::Resources; use 5.008_001; use Moose; use namespace::clean -except => ['meta']; BEGIN { extends 'Catalyst::Controller::ActionRole' } our $VERSION = '0.08'; __PACKAGE__->config( action_roles => [ '+Catalyst::Controller::Resources::ActionRole::ResourceAction' ], ); with qw( Catalyst::Controller::Resources::Role::BuildActions Catalyst::Controller::Resources::Role::ParseAttributes ); has '+_default_collection_actions' => ( default => sub { +{ list => { method => 'GET', path => '' }, create => { method => 'POST', path => '' }, post => { method => 'GET', path => 'new' }, }, }, ); has '+_default_member_actions' => ( default => sub { +{ show => { method => 'GET', path => '' }, update => { method => 'PUT', path => '' }, destroy => { method => 'DELETE', path => '' }, edit => { method => 'GET', path => 'edit' }, delete => { method => 'GET', path => 'delete' }, }, }, ); sub _COLLECTION :ResourceChained ResourcePathPart CaptureArgs(0) {} sub _MEMBER :ResourceChained ResourcePathPart CaptureArgs(1) {} __PACKAGE__->meta->make_immutable;