in reply to Help seperating business logic from controller (catalyst/dbic)
sub create :Local{ my ( $self, $c ) = @_; my $nation = $c->request->params->{nation}; #Action Logic; Form was submitted, lets create then #Check to see if the nation name already exists #UPDATED: create method overloaded to return 0 if #nation name exists if($nation) { if($c->user->nations->create({ name => $nation, owner => $c->user->get('id'), map_nation_resource => [ { resour +ce_id => 1 }, { resource_id => 2 } ], })){ $c->redirect($c->uri_for('/nation')); } else { $c->stash->{error_msg} = "Nation name already taken!"; } } return $c->stash->{template} = 'nation/create.tt2'; }
package Game::DB::ResultSet::Nation; use strict; use warnings; use base 'DBIx::Class::ResultSet'; #Override nation's create method to check if nation name exists #Before creating. If it does, return 0 sub create { my $self = shift; my $nation) = shift; if($self->find( {name => $nation->{name}} ) ) { return 0; } $self->next::method($nation); } 1;
|
|---|