[Catalyst] Request

Larry Leszczynski larryl at emailplus.org
Wed Oct 28 01:58:46 GMT 2009


Hi Octavian -

On Tue, 27 Oct 2009 23:16 +0200, "Octavian Râsnita" <orasnita at gmail.com>
wrote:
> From: "Larry Leszczynski" <larryl at emailplus.org>
> > Hi Octavian -
> >
> >> Is there a Catalyst Request method for getting the path and the
> >> query_string? (Everything's after the base).
> >>
> >> I want to use it in a TT template for changing the current language.
> >>
> >> The current URI is something like:
> >> http://www.site.com/prg?var1=val1&var2=val2
> >>
> >> The base for this URI is:
> >> http://www.site.com/en/
> >> (Because I overwritten prepare_path as in the example given on the Cat
> >> wiki)
> >>
> >> and the URL that should be printed with the new language is:
> >> http://www.site.com/ro/prg?var1=val1&var2=val2
> >
> > Not sure if this gets you all the way there, but you could call
> > "c.req.uri" with no arguments, that should give you the current request
> > including base, path and query string.  Then you could strip off
> > c.req.base from the beginning of that string.
> 
> Thank you Larry, but the problem is that the base was overwritten and it 
> contains some more than the uri, so I can't cut it from the URI.

It should work fine, we do something very similar.  The trick is that
after the prepare_path fixup (if you did it like in the wiki), when you
stringify c.req.uri, it will reflect the *new* base, not the original. 
Using your example:

   original request url:    http://www.site.com/prg?var1=val1&var2=val2
   rewritten request url:  
   http://www.site.com/en/prg?var1=val1&var2=val2

So you should have:

   [%
      uri  = c.req.uri;     #
      http://www.site.com/en/prg?var1=val1&var2=val2
      base = c.req.base;    # http://www.site.com/en/

      pattern = '^' _ base;                        # pattern not
      tested...
      path_and_query = uri.replace(pattern, '');
   %]

So it's easy to strip "base" from the front of "uri" and get what you
need, without knowing what "base" is.


> Thank you Evan. Your solution was helpful.
> I didn't know that c.req.uri is not just a string, but an object that has 
> its own methods, and c.req.uri.path_query was the one I needed.

This could work, but given the same original url and prepare_path fixup,
you will have:

   [%
      uri = c.req.uri;                         #
      http://www.site.com/en/prg?var1=val1&var2=val2
      path_and_query = c.req.uri.path_query;   #                   
      /en/prg?var1=val1&var2=val2
   %]

So now when you build the new url you have to be aware that
path_and_query contains the "/en" part that needs to be stripped.


Larry



More information about the Catalyst mailing list