[Catalyst] RFC on how to structure controllers
Thomas Nagel
me at thomasnagel.com
Tue Jun 13 13:41:04 CEST 2006
Gert Burger wrote:
> -Using the game as part of the url, eg
> http://bla/games/ageofempires3/gamebooking, this will complicate the
> controller's methods a bit as each method will be a regex.
The game-as-part-of-URL seem to be the cleanest approach to me:
Why not extend prepare_path globally with something like (untested):
sub prepare_path {
my $c = shift;
$c->NEXT::prepare_path(@_);
my $base = $c->req->base;
my $path = $c->req->path;
if ($path =~ m!^(game1|game2)/!) {
my $game = $1;
$c->stash->{game} = $game;
## optionally rm $game from URL
$path =~ s!^$game/!!;
$c->req->path($path);
}
return;
}
Now game can be found in $c->stash->{game}
You my also overwrite the behavior of $c->uri_for by using a Plugin
(again untested):
package Catalyst::Plugin::GameContext;
use strict;
use Next;
use URI;
sub uri_for {
my $c = shift;
my $uri = URI->new( $c->NEXT::uri_for( @_ ) );
$uri->path( $c->stash->{game} . $uri->path )
unless $uri->path =~ m!/(?:css|i|js)/!;
return $uri->as_string;
}
and include it with
use Catalyst qw(ConfigLoader DefaultEnd GameContext Static::Simple);
-Thomas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3287 bytes
Desc: S/MIME Cryptographic Signature
Url : http://lists.rawmode.org/pipermail/catalyst/attachments/20060613/ed2861d4/attachment.bin
More information about the Catalyst
mailing list