CatalystX::Resource - Provide CRUD functionality to your Controllers
version 0.03
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 / ], }, );
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)
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'], },
array ref of controller names which will be injected into your app
CatalystX::Resource detaches to $self->error_path if a resource cannot be found. Make sure you implement this action in your App. (default: '/default')
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.
with
BEGIN
Including it via traits => ['MergeUploadParams'] works around this.
traits => ['MergeUploadParams']
MergeUploadParams is different from the other roles. The other roles add a subroutine whereas MergeUploadParams uses a Moose Method Modifier.
Check out Catalyst::Controller::DBIC::API if you want to provide your data as a web service.
David Schmidt <davewood@cpan.org>
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.
To install CatalystX::Resource, copy and paste the appropriate command in to your terminal.
cpanm
cpanm CatalystX::Resource
CPAN shell
perl -MCPAN -e shell install CatalystX::Resource
For more information on module installation, please visit the detailed CPAN module installation guide.