# $Id: /local/CPAN/Mango/lib/Mango/Catalyst/Plugin/Forms.pm 1644 2008-06-02T01:46:53.055259Z claco $ package Mango::Catalyst::Plugin::Forms; use strict; use warnings; our $VERSION = $Mango::VERSION; BEGIN { use base qw/Class::Accessor::Grouped/; use Mango (); use Scalar::Util qw/blessed/; __PACKAGE__->mk_group_accessors( 'inherited', qw/_forms/ ); } __PACKAGE__->_forms( {} ); ## no critic; sub add_form { my ( $self, $form, $name ) = @_; if ( blessed $form && $form->isa('Mango::Form') ) { $name ||= $form->id || $form->name; $self->_forms->{$name} = $form; } else { Mango::Exception->throw('NOT_A_FORM'); } return; } sub forms { my ( $self, $name ) = @_; if ( my $form = $self->_forms->{$name} ) { $form = $form->clone; ## hack around form action // under Cat::Test/Mech if ( $form->{'action'} || $form->action =~ /^\/\// ) { $form->action( $self->request->uri->as_string ); } $form->params( $self->request ); $form->localizer( sub { $self->localize(@_) } ); return $form; } return; } 1; __END__ =head1 NAME Mango::Catalyst::Plugin::Forms - Catalyst plugin for application wide forms =head1 SYNOPSIS use Catalyst qw/ -Debug ConfigLoader Mango::Catalyst::Plugin::Forms Static::Simple /; =head1 DESCRIPTION Mango::Catalyst::Plugin::Forms exposes all of the Mango forms loaded into the current Mango application. =head1 METHODS =head2 add_form =over =item Arguments: $form, $name =back Adds a form by name to the collection of application forms. If not specified, the name will be taken from the forms name attribute. =head2 forms Gets the collection of Mango::Form objects loaded into the current application. =head1 SEE ALSO L, L =head1 AUTHOR Christopher H. Laco CPAN ID: CLACO claco@chrislaco.com http://today.icantfocus.com/blog/