Provided by: libcatalyst-plugin-smarturi-perl_0.039-1_all bug

NAME

       Catalyst::Plugin::SmartURI - Configurable URIs for Catalyst

SYNOPSIS

       In your lib/MyApp.pm, load the plugin and your other plugins, for example:

           use Catalyst qw/
               -Debug
               ConfigLoader
               Static::Simple
               Session
               Session::Store::Memcached
               Session::State::Cookie
               Authentication
               Authorization::Roles
               +CatalystX::SimpleLogin
               SmartURI
           /;

       In your .conf:

           <Plugin::SmartURI>
               disposition host-header   # application-wide
               uri_class   URI::SmartURI # by default
           </Plugin::SmartURI>

       Per request:

           $c->uri_disposition('absolute');

       Methods on URIs:

           <a href="[% c.uri_for('/foo').relative %]" ...

DESCRIPTION

       Configure whether "$c->uri_for" and "$c->req->uri_with" return absolute, hostless or
       relative URIs, or URIs based on the 'Host' header. Also allows configuring which URI class
       to use. Works on application-wide or per-request basis.

       This is useful in situations where you're for example, redirecting to a lighttpd from a
       firewall rule, instead of a real proxy, and you want your links and redirects to still
       work correctly.

       To use your own URI class, just subclass URI::SmartURI and set "uri_class", or write a
       class that follows the same interface.

       This plugin installs a custom "$c->request_class", however it does so in a way that won't
       break if you've already set "$c->request_class" yourself, ie. by using
       Catalyst::Action::REST (thanks mst!).

       There is a minor performance penalty in perls older than 5.10, due to Class::C3, but only
       at initialization time.

METHODS

   $c->uri_for
   $c->req->uri_with
       Returns a "$c->uri_class" object (URI::SmartURI by default) in the configured
       "$c->uri_disposition".

   $c->req->uri
       Returns a "$c->uri_class" object. If the context hasn't been prepared yet, uses the
       configured value for "uri_class".

       "$c->req->uri->relative" will be relative to "$c->req->base".

   $c->req->referer
       Returns a "$c->uri_class" object for the referer (or configured "uri_class" if there's no
       context) with reference set to "$c->req->uri" if it comes from "$c->req->base".

       In other words, if referer is your app, you can do "$c->req->referer->relative" and it
       will do the right thing.

CONFIGURATION

       In myapp.conf:

           <Plugin::SmartURI>
               disposition absolute
               uri_class   URI::SmartURI
           </Plugin::SmartURI>

       disposition
           One of 'absolute', 'hostless', 'relative' or 'host-header'.  Defaults to 'absolute'.

           The special disposition 'host-header' uses the value of your 'Host:' header.

       uri_class
           The class to use for URIs, defaults to URI::SmartURI.

PER REQUEST

           package MyAPP::Controller::RSSFeed;

           ...

           sub begin : Private {
               my ($self, $c) = @_;

               $c->uri_class('Your::URI::Class::For::Request');
               $c->uri_disposition('absolute');
           }

       $c->uri_disposition('absolute'|'hostless'|'relative'|'host-header')
           Set URI disposition to use for the duration of the request.

       $c->uri_class($class)
           Set the URI class to use for "$c->uri_for" and "$c->req->uri_with" for the duration of
           the request.

EXTENDING

       "$c->prepare_uri" actually creates the URI, which you can override.

SEE ALSO

       URI::SmartURI, Catalyst, URI

AUTHOR

       Rafael Kitover, "<rkitover at cpan.org>"

BUGS

       Please report any bugs or feature requests to "bug-catalyst-plugin-smarturi at
       rt.cpan.org", or through the web interface at
       <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Catalyst-Plugin-SmartURI>.  I will be
       notified, and then you'll automatically be notified of progress on your bug as I make
       changes.

SUPPORT

       You can find documentation for this module with the perldoc command.

           perldoc Catalyst::Plugin::SmartURI

       You can also look for information at:

       •   RT: CPAN's request tracker

           <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Catalyst-Plugin-SmartURI>

       •   AnnoCPAN: Annotated CPAN documentation

           <http://annocpan.org/dist/Catalyst-Plugin-SmartURI>

       •   CPAN Ratings

           <http://cpanratings.perl.org/d/Catalyst-Plugin-SmartURI>

       •   Search CPAN

           <http://search.cpan.org/dist/Catalyst-Plugin-SmartURI>

ACKNOWLEDGEMENTS

       from #catalyst:

       vipul came up with the idea

       mst came up with the design and implementation details for the current version

       kd reviewed my code and offered suggestions

TODO

       I'd like to extend on Catalyst::Plugin::RequireSSL, and make a plugin that rewrites URIs
       for actions with an SSL attribute.

COPYRIGHT & LICENSE

       Copyright (c) 2008 Rafael Kitover

       This program is free software; you can redistribute it and/or modify it under the same
       terms as Perl itself.