
orasnita at gmail
Oct 28, 2009, 1:49 AM
Post #6 of 7
(1170 views)
Permalink
|
From: "Larry Leszczynski" <larryl [at] emailplus> Hi Octavian - > > 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 Larry. Finally I've done it this way. > 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 ** Oh yes, I found that so I've used the solution you proposed. Now I use the following line in prepare_path() for every request: $c->request->uri->path("$language/" . $c->request->path); so the URI is always overwritten and it contains the language indicator. I had previously used that line like unless(@path_chunks && $valid_languages{$path_chunks[0]}) { $c->request->uri->path("$language/" . $c->request->path); } and in that case the URI wasn't containing the language indicator when the original URI was without a language indicator, but the base was always containing it. But now it seems to work fine. Thank you. Octavian _______________________________________________ List: Catalyst [at] lists Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst [at] lists/ Dev site: http://dev.catalyst.perl.org/
|