[Catalyst] Catalyst::Request path method as a setter
Bill Moseley
moseley at hank.org
Mon Oct 21 14:58:24 GMT 2013
>
> =3Dhead2 $req->path
>
Returns the path, i.e. the part of the URI after $req->base, for the
> current request.
Pasted below is Catalyst::Request's path method. Note from the final else
block that $req->path returns the request uri's path ($req->uri->path) with
the $req->base->path *removed* as the documentation says.
So, if the request URI and base URI are these:
http://localhost/myapp/path/to/action # $req->uri
http://localhost/myapp/ # $req->base
then $req->path is:
path/to/action
Using the example above, and looking at what $req->path( ) does as a setter:
$req->path( $req->path );
would result in a new request URI of:
http://localhost/path/to/action.
The path method doesn't document what it does as a setter, but this
behavior looks broken because it alters the request URI's path.
What do you think?
sub path {
my ( $self, @params ) =3D @_;
if (@params) {
$self->uri->path(@params);
$self->_clear_path;
}
elsif ( $self->_has_path ) {
return $self->_path;
}
else {
my $path =3D $self->uri->path;
my $location =3D $self->base->path;
$path =3D~ s/^(\Q$location\E)?//;
$path =3D~ s/^\///;
$self->_path($path);
return $path;
}
}
-- =
Bill Moseley
moseley at hank.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20131021/a5b39=
8a9/attachment.htm
More information about the Catalyst
mailing list