I'm looking to implement a large project under CGI::Application. I'd like to keep most database manipulation out of the main WebApp module, and into other modules that represent more tangible objects.
I'm wondering how to pass the database handle around. I plan to run under mod_perl with Apache::DBI. Is it ok to pass handles back and forth this way? or should the objects i'm calling create and destroy the database handles themselves. Or should i be going about this some other way
Below is some code showing what i'm thinking of doing:
package MyWebApp;
use base 'CGI::Application';
use MyWebApp::DB;
use MyWebApp::TicketCollection;
use strict;
# Needed for our database connection
sub setup {
my $self = shift;
my $db = new MyWebApp::DB;
my $dbh = $db->get_dbh;
$self->start_mode('menu');
$self->tmpl_path('');
$self->run_modes(
tickets => 'show_tickets',
);
# Connect to DBI database
$self->param('dbh' => $dbh);
}
sub teardown {
my $self = shift;
# Disconnect when we're done
$self->param('dbh')->disconnect();
}
sub show_tickets{
my $self = shift;
my $q = $self->query();
my ($start_date, $end_date) =
( $q->param('start_date'), $q->param('start_date') );
#more code to verify user input
my $tc = new MyWebApp::TicketCollection(
$self->param('dbh'),
$start_date,
$end_date );
#code to display tickets
}
1;