[Catalyst] How can we parse the path in catalyst

Joe Landman landman at scalableinformatics.com
Wed Mar 1 03:54:47 CET 2006


Hi Vidya:

   Not going to look at your old code, thats for you to deal with.

   Here is the default regex that I use to handle my users controller, 
so that any URL of the form http://server/users/... gets mapped by 
default into this controller method.

sub default : LocalRegex('(add|remove|account|list|search)') {
    my ( $self, $c ) = @_;
    my @stuff = @{$c->req->snippets};
    my ($rc,$q);
    my (@all);

    if (lc($stuff[0]) eq "doit")
       {
    $c->stash->{template}='admin/user.html';
    $c->stash->{mode}=$stuff[0];
    $c->forward('SICP::View::Mason');

       }
      else
       {

    @all = SICP::Model::DBIC::UserAccounts->search();
    push @{$c->stash->{list}}, at all;

    # set the template
    $c->stash->{template}='admin/user.html';
    $c->stash->{mode}=$stuff[0];
    $c->forward('SICP::View::Mason');
       }
}

Not the best code in the world, but what it does is take everything 
after the /users/ in the URL and map it into this controller for further 
processing.

 From here you can look at 
http://search.cpan.org/~mramberg/Catalyst-5.65/lib/Catalyst/Manual/Intro.pod#URL_Path_Handling

and if you just want to munge it yourself, look at this 
http://search.cpan.org/~mramberg/Catalyst-5.65/lib/Catalyst/Request.pm#%24req-%3Epath 


specifically the $req->path.  From this this you can slice and dice the 
path to your hearts content.  Use the stash method to make your life 
easier in terms of temporary placement of information, and decide where 
you want do redirect the specific urls to.  You can stash into specific 
templates for display.  And you can call $c->forward as you require to 
hop over to a different controller, based in part on how you want to 
slice and dice your code.

The rest is, unfortunately, up to you.

Vidya Sagar wrote:
> Hello all,
> 
> how can i parse the path ie url in catalyst..my old code is:
> 
> # parse path. it will translate old urls into new urls.
> sub parse_path {
> 
>         my $self = shift;
>         # remove the trailing .html for any path other than starting 
> with /page/
>         $self->{path} =~ s/\.html$// if $self->{path} !~ /^page\//;
> 
>         $self->SUPER::parse_path(@_);
> 
>         # translate old paths into new paths
>         if($self->{path} =~ /cgi-bin\/store\/index.cgi/) {
> 
>                 my $table = $self->{ar}->parms;
> 
>                 if($table->get('page')) {
>                         if($table->get('page') =~ /officeprods.cgi/) {
>                                 $self->{table} = 'categories';
>                                 $self->{action} = 'officeproducts';
>                         }
>                         elsif($table->get('page') =~ /arrow-faq.htm/) {
>                                 $self->{path} = 'page/arrow-faq.htm';
>                         }
>                 }
>                 elsif($table->get('product') || $table->get('keywords')) {
>                         # search product category
>                         $self->{table} = 'product';
>                         $self->{action} = 'find';
>                         $table->set('keywords', 
> $table->get('keywords')." ".$table->get('product'));
>                 }
>                 else { # catch all condition send the user to home page
>                         $self->{path} = 'frontpage';
>                 }
> 
>                 $table->unset('exact_match');
>                 $table->unset('product');
>                 $table->unset('cat_row');
>                 $table->unset('cart_id');
>                 $table->unset('search_stores');
>                 $table->unset('page');
>                 # dont remove the source parameter. it is needed to 
> decide on popup window
>                 #$table->unset('source');
>         }
> }
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Catalyst mailing list
> Catalyst at lists.rawmode.org
> http://lists.rawmode.org/mailman/listinfo/catalyst

-- 
Joseph Landman, Ph.D
Founder and CEO
Scalable Informatics LLC,
email: landman at scalableinformatics.com
web  : http://www.scalableinformatics.com
phone: +1 734 786 8423
fax  : +1 734 786 8452
cell : +1 734 612 4615



More information about the Catalyst mailing list