[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