NAME
CatalystX::CRUD::REST - RESTful CRUD controller
SYNOPSIS
# create a controller
package MyApp::Controller::Foo;
use strict;
use base qw( CatalystX::CRUD::REST );
use MyForm::Foo;
__PACKAGE__->config(
form_class => 'MyForm::Foo',
init_form => 'init_with_foo',
init_object => 'foo_from_form',
default_template => 'path/to/foo/edit.tt',
model_name => 'Foo',
primary_key => 'id',
view_on_single_result => 0,
page_size => 50,
enable_rpc_compat => 0,
);
1;
# now you can manage Foo objects using your MyForm::Foo form class
# with URIs at:
# foo/<pk>
# and use the HTTP method name to indicate the appropriate action.
# POST /foo -> create new record
# GET /foo -> list all records
# PUT /foo/<pk> -> update record
# DELETE /foo/<pk> -> delete record
# GET /foo/<pk> -> view record
# GET /foo/<pk>/edit_form -> edit record form
# GET /foo/create_form -> create record form
DESCRIPTION
CatalystX::CRUD::REST is a subclass of CatalystX::CRUD::Controller. Instead of calling RPC-style URIs, the REST API uses the HTTP method name to indicate the action to be taken.
See CatalystX::CRUD::Controller for more details on configuration.
The REST API is designed with identical configuration options as the RPC-style Controller API, so that you can simply change your @ISA chain and enable REST features for your application.
IMPORTANT: If you are using a CatalystX::CRUD::REST subclass in your application, it is important to add the following to your main MyApp.pm file, just after the setup() call:
__PACKAGE__->setup();
# add these 3 lines
use MRO::Compat;
use mro 'c3';
Class::C3::initialize();
This is required for Class::C3 to resolve the inheritance chain correctly, especially in the case where your app is subclassing more than one CatalystX::CRUD::Controller::* class.
METHODS
edit_form
Acts just like edit() in base Controller class, but with a RESTful name.
create_form
Acts just like create() in base Controller class, but with a RESTful name.
create
Redirects to create_form().
rest
Attribute: Path Args
Calls the appropriate method based on the HTTP method name.
default
Attribute: Private
Returns 404 status. In theory, this action is never reached, and if it is, will log an error. It exists only for debugging purposes.
req_method( context )
Internal method. Returns the HTTP method name, allowing POST to serve as a tunnel when the _http_method
or x-tunneled-method
param is present. Since most browsers do not support PUT or DELETE HTTP methods, you can use the special param to tunnel the desired HTTP method and then POST instead.
edit( context )
Overrides base method to disable chaining.
view( context )
Overrides base method to disable chaining.
save( context )
Overrides base method to disable chaining.
rm( context )
Overrides base method to disable chaining.
remove( context )
Overrides base method to disable chaining.
add( context )
Overrides base method to disable chaining.
view_related( context )
Overrides base method to disable chaining.
list_related( context )
Overrides base method to disable chaining.
delete( context )
Overrides base method to disable chaining.
read( context )
Overrides base method to disable chaining.
update( context )
Overrides base method to disable chaining.
postcommit( context, object )
Overrides base method to redirect to REST-style URL.
new
Overrides base method just to call next::method to ensure config() gets merged correctly.
AUTHOR
Peter Karman, <perl at peknet.com>
BUGS
Please report any bugs or feature requests to bug-catalystx-crud at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=CatalystX-CRUD. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc CatalystX::CRUD
You can also look for information at:
Mailing List
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
RT: CPAN's request tracker
Search CPAN
COPYRIGHT & LICENSE
Copyright 2008 Peter Karman, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.