[Catalyst] Cascading action dispatching
Matthew Pitts
mpitts at a3its.com
Sun Oct 21 15:20:20 GMT 2007
On Fri, 2007-10-19 at 17:16 -0400, Matthew Pitts wrote:
>
> I'm trying to figure out a way to have my Cat app dispatch in a way
> that
> would allow multiple actions in the same namespace and have them
> called
> in succession until one of them actually handles the request.
>
> I have a client that really likes base-level URLs, like
> "/shoppingmallxyz", and wants to use them for landing pages that are
> functionally different. In some of these cases the base-level URL
> paths
> are really just monikers for things that are retrieved from the DB and
> if it exists, then a page is rendered.
I guess another, maybe more elegant, way to accomplish this same effect
would be to override register_actions in the Controllers where I want to
do this and have a call to a register_dynamic_actions method like so:
package MyApp::Controller::Center;
sub register_actions {
my $self = shift;
my ( $c ) = @_;
$self->register_dynamic_actions($c);
return $self->SUPER::register_actions(@_); # or NEXT?
}
sub register_dynamic_actions {
my $self = shift;
my ( $c ) = @_;
my $centers = $c->model('Center')->all;
while ( my $center = $centers->next ) {
my $action = $self->create_action(...);
$c->dispatcher->register($c, $action);
}
}
1;
An obvious side-effect (AFAIK) of doing it this way is that the app has
to be restarted for new dynamic actions to take affect. The benefit,
however, is that the root-level pseudo-actions I was trying to achieve
with on-the-fly DB lookups are now first class actions and would not
require a DB call on each request.
I may be crazy... anybody got any thoughts on this?
--
Matthew W. Pitts
Software Engineer
mpitts at a3its.com
336.202.3913 (mobile)
A3 IT Solutions, LLC
www.a3its.com
More information about the Catalyst
mailing list