My guess here is that path should be RO and that if you need to write code that
messed with the path, that should happen in plack middleware.
I'll ask around IRC to try and find out why this was allowed in the first
place. My guess it that we wanted to allow people to change the path for doing
complex path rewriting.
jnap
On Monday, October 21, 2013 10:00 AM, Bill Moseley <[email protected]> wrote:
=head2 $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 ) = @_;
if (@params) {
$self->uri->path(@params);
$self->_clear_path;
}
elsif ( $self->_has_path ) {
return $self->_path;
}
else {
my $path = $self->uri->path;
my $location = $self->base->path;
$path =~ s/^(\Q$location\E)?//;
$path =~ s/^\///;
$self->_path($path);
return $path;
}
}
--
Bill Moseley
[email protected]
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/