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 <mose...@hank.org> 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
mose...@hank.org 
_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/
_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to