[cgiapp] Re: error subclassing CGIApp
P Kishor
punk.kish at gmail.com
Wed Aug 5 14:01:59 EDT 2009
So, I think I have discovered an answer to my problem -- seems like I
can't have setup in BaseCGIApp. If I move the declaration of the
runmodes to the subclassed package MyApp.pm, then things work fine.
Which begs the next question -- how do I declare a bunch of runmodes
in BaseCGIApp so that I don't have to re-declare them in a subclassed
packed?
On Wed, Aug 5, 2009 at 12:22 PM, P Kishor<punk.kish at gmail.com> wrote:
> I have a pretty basic app modeled after the Perl CGI-App MVC pattern
> by Mark Rajcok. It looks like so
>
> index.cgi
> -----------------------------------------------------
> use MyApp;
>
> my $App = 'MyApp';
>
> CGI::Application::Dispatch->dispatch(
> table => [
> 'welcome' => { app => $App, rm => 'welcome', },
> 'view' => { app => $App, rm => 'view', },
> 'account_prefs' => { app => $App, rm => 'account_prefs', },
> 'account_admin' => { app => $App, rm => 'account_admin', },
> '' => { app => $App, rm => 'welcome', },
> ],
> );
> =====================================================
>
> BaseCGIApp.pm
> -----------------------------------------------------
> package BaseCGIApp;
>
> use strict;
> use base 'CGI::Application';
>
> use CGI::Simple;
> use CGI::Application::Plugin::DBH qw(dbh dbh_config);
> use CGI::Application::Plugin::Session;
> use CGI::Application::Plugin::LogDispatch;
> use CGI::Application::Plugin::Authentication;
>
> sub cgiapp_get_query { my $self = shift; CGI::Simple->new(); }
>
> # Configure the session once during the init stage
> sub cgiapp_init {
> my $self = shift;
>
> $self->authen->config(
> CREDENTIALS => [ 'username', 'password' ],
> DRIVER => [
> 'DBI',
> DBH => $self->dbh,
> TABLE => 'users',
> CONSTRAINTS => { 'username' => '__CREDENTIAL_1__',
> 'MD5:password' => '__CREDENTIAL_2__' },
> ],
> LOGIN_RUNMODE => 'account_login',
> LOGOUT_RUNMODE => 'welcome',
> POST_LOGIN_RUNMODE => 'view',
> POST_LOGIN_CALLBACK => \&_account_update_session_on_login,
> );
>
> }
>
> sub setup {
> my $self = shift;
>
> $self->mode_param(path_info => 1, param => 'rm');
> $self->start_mode('welcome');
>
> $self->run_modes(
>
> # unprotected runmodes
> 'account_create' => 'account_create',
> 'account_mail_pwd' => 'account_mail_pwd',
>
> # protected runmodes
> 'account_login' => 'account_login',
> 'account_prefs' => 'account_prefs',
> 'account_admin' => 'account_admin',
>
> );
>
> $self->authen->protected_runmodes(
> 'account_prefs',
> 'account_admin'
> );
>
> }
>
> sub cgiapp_prerun { my $self = shift; }
> sub account_login {..}
> sub account_prefs {..}
> sub account_admin {..}
> =====================================================
>
> MyApp.pm
> -----------------------------------------------------
> package MyApp;
>
> use strict;
> use base 'BaseCGIApp';
>
> sub setup {
> my $self = shift;
>
> $self->start_mode('welcome');
> $self->run_modes(
> 'welcome' => 'welcome', # unprotected runmode
> 'view' => 'view', # protected runmode
> );
> $self->authen->protected_runmodes('view',);
> }
>
> sub welcome {..}
> sub view {..}
> =====================================================
>
> The following work
>
> http://../
> http://../welcome
>
> The following fail with the error "CGI::Application::Dispatch error! Not Found"
>
> http://../view
> http://../account_prefs
>
> In other words, all protected runmodes are "not found." What am I doing wrong?
>
> By the way, if I do away with the BaseCGIApp.pm, and move all the
> runmodes into one single package 'MyApp' then everything works
> properly.
>
> --
> Puneet Kishor http://www.punkish.org
> Carbon Model http://carbonmodel.org
> Charter Member, Open Source Geospatial Foundation http://www.osgeo.org
> Science Commons Fellow, http://sciencecommons.org/about/whoweare/kishor
> Nelson Institute, UW-Madison http://www.nelson.wisc.edu
> -----------------------------------------------------------------------
> Assertions are politics; backing up assertions with evidence is science
> =======================================================================
> Sent from Madison, WI, United States
>
--
Puneet Kishor http://www.punkish.org
Carbon Model http://carbonmodel.org
Charter Member, Open Source Geospatial Foundation http://www.osgeo.org
Science Commons Fellow, http://sciencecommons.org/about/whoweare/kishor
Nelson Institute, UW-Madison http://www.nelson.wisc.edu
-----------------------------------------------------------------------
Assertions are politics; backing up assertions with evidence is science
=======================================================================
Sent from Madison, WI, United States
More information about the cgiapp
mailing list