NAME
CatalystX::Resource - Provide CRUD functionality to your Controllers
VERSION
version 0.03
SYNOPSIS
use Catalyst qw/
+CatalystX::Resource
/;
__PACKAGE__->config(
'Controller::Resource::Artist' => {
resultset_key => 'artists',
resource_key => 'artist',
form_class => 'TestApp::Form::Resource::Artist',
model => 'DB::Resource::Artist',
error_path => '/error',
actions => {
base => {
PathPart => 'artists',
},
},
},
'CatalystX::Resource' => {
controllers => [ qw/ Artist / ],
},
);
DESCRIPTION
CatalystX::Resource enhances your App with CRUD functionality.
After creating files for HTML::FormHandler, DBIx::Class and Template Toolkit templates you get create/edit/delete/show/list actions for free.
Resources can be nested. (e.g.: Artist has_many Albums)
traits
default
- List ... GET /<resource>/list
- Show ... GET /<resource>/*/show
- Delete ... POST /<resource>/*/delete
- Form
- Create ... GET|POST /<resource>/create
- Edit ... GET|POST /<resource>/*/edit
optional
- MergeUploadParams
- Sortable
-
POST /<resource>/*/move_next POST /<resource>/*/move_previous POST /<resource>/*/move_to
You can remove actions if you don't need them.
Example, you don't need the edit action: 'Controller::Resource::Artist' => { ..., traits => ['-Edit'], },
Use the Sortable trait to make your resources sortable: 'Controller::Resource::Artist' => { ..., traits => ['Sortable'], },
CONFIG
controllers
array ref of controller names which will be injected into your app
error_path
CatalystX::Resource detaches to $self->error_path if a resource cannot be found. Make sure you implement this action in your App. (default: '/default')
CAVEAT
Using Moose Method Modifiers on your Resource Controller
If you want to apply Method Modifiers to a resource controller you have to subclass from CatalystX::Resource::Controller::Resource and apply the roles in a BEGIN block.
The following example loads the List trait via with in order to apply a before method modifier.
package MyApp::Controller::Foo;
use Moose;
use namespace::autoclean;
__PACKAGE__->config(
resultset_key => 'artists',
resource_key => 'artist',
form_class => 'TestApp::Form::Resource::Artist',
model => 'DB::Resource::Artist',
traits => [qw/ MergeUploadParams -Delete /],
error_path => '/error',
actions => {
base => {
PathPart => 'artists',
},
},
);
BEGIN {
extends 'CatalystX::Resource::Controller::Resource';
with 'CatalystX::Resource::TraitFor::Controller::Resource::List';
with 'CatalystX::Resource::TraitFor::Controller::Resource::Show';
with 'CatalystX::Resource::TraitFor::Controller::Resource::Form';
with 'CatalystX::Resource::TraitFor::Controller::Resource::Create';
with 'CatalystX::Resource::TraitFor::Controller::Resource::Edit';
with 'CatalystX::Resource::TraitFor::Controller::Resource::Sortable';
}
before 'list' => sub { ... }
1;
Because of a bug in MooseX::MethodAttributes CatalystX::Resource::TraitFor::Controller::Resource::MergeUploadParams is not applied correctly if you include it via with
in the BEGIN
block of the subclassed controller.
Including it via traits => ['MergeUploadParams']
works around this.
MergeUploadParams is different from the other roles. The other roles add a subroutine whereas MergeUploadParams uses a Moose Method Modifier.
SEE ALSO
Check out Catalyst::Controller::DBIC::API if you want to provide your data as a web service.
AUTHOR
David Schmidt <davewood@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2011 by David Schmidt.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.