| Catalyst-Plugin-SmartURI documentation | view source | Contained in the Catalyst-Plugin-SmartURI distribution. |
Catalyst::Plugin::SmartURI - Configurable URIs for Catalyst
Version 0.036
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 %]" ...
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.
Returns a $c->uri_class object (URI::SmartURI by default) in the configured
$c->uri_disposition.
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.
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.
In myapp.conf:
<Plugin::SmartURI>
disposition absolute
uri_class URI::SmartURI
</Plugin::SmartURI>
One of 'absolute', 'hostless', 'relative' or 'host-header'. Defaults to 'absolute'.
The special disposition 'host-header' uses the value of your 'Host:' header.
The class to use for URIs, defaults to URI::SmartURI.
package MyAPP::Controller::RSSFeed;
...
sub begin : Private {
my ($self, $c) = @_;
$c->uri_class('Your::URI::Class::For::Request');
$c->uri_disposition('absolute');
}
Set URI disposition to use for the duration of the request.
Set the URI class to use for $c->uri_for and $c->req->uri_with for the
duration of the request.
$c->prepare_uri actually creates the URI, which you can override.
Rafael Kitover, <rkitover at cpan.org>
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.
You can find documentation for this module with the perldoc command.
perldoc Catalyst::Plugin::SmartURI
You can also look for information at:
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Catalyst-Plugin-SmartURI
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
I'd like to extend on Catalyst::Plugin::RequireSSL, and make a plugin that rewrites URIs for actions with an SSL attribute.
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.
| Catalyst-Plugin-SmartURI documentation | view source | Contained in the Catalyst-Plugin-SmartURI distribution. |