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