[Catalyst] uri_for

Tomas Doran bobtfish at bobtfish.net
Wed Jan 27 21:12:17 GMT 2010


On 20 Jan 2010, at 09:40, Carl Johnstone wrote:

> Tomohiro Hosaka wrote:
>> Is this correct result?
>
> Yes, the previous situation was a bug. Given
>
> sub foo : Args(1) {
>  my ($c, $arg) = @_;
> };
>
>
> The URL http://127.0.0.1/foo/bar%2Fbaz would match and set $arg to  
> 'bar/baz'
> correctly. However reversing that using uri_for then returns the  
> incorrect
> URL.

However, unfortunately - we have to provide compatibility - for  
example c.uri_for('/static', 'css/crud', crud_type ) or similar  
constructions were broken.

I've just fixed this in trunk so that if you have an action object  
(with $c->uri_for_action, or $c->uri_for($c->action, or $c->uri_for($c- 
 >controller->action_for('foo') ) (as recommended to construct paths  
to actions) - you *will* get the encoding for args and captures.

However passing in a set of strings to basically be concatenated to  
the base uri and joined with / to produce paths will still work...

I think this is the best compromise between having round-trippable  
URIs, and also maintaining compatibility for legacy applications.

If you feel differently, shout up now please :)

Cheers
t0m




More information about the Catalyst mailing list