NAME
Catalyst::Controller::Resources - Catalyst Collection Resources Controller
SYNOPSIS
MAP RESOURCES
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) = @_;
}
NESTED RESOURCES
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) = @_;
}
WITH OTHER CONTROLLERS AND ATTRIBUTES
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>
CAUTION
This version works under Catalyst 5.8 (catamoose). If you use this module with Catalyst 5.7, please check out version 0.04.
DESCRIPTION
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.
RESERVED ACTIONS
- list
-
called by GET /collection request
- create
-
called by POST /collection request
- show
-
called by GET /member/{member_id} request
- update
-
called by PUT /member/{member_id} request
- destroy
-
called by DELETE /member/{member_id} request
- post
-
called by GET /collection/new request
- edit
-
called by GET /member/{member_id}/edit request
AUTHOR
NAKAGAWA Masaki <masaki@cpan.org>
Daisuke Murase <typester@cpan.org>
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
SEE ALSO
Catalyst::Controller, Catalyst::Controller::SingletonResource, http://api.rubyonrails.org/classes/ActionController/Resources.html