Cataly...artURI(3pm)
π¦ NAME π¦
Catalyst::Plugin::SmartURI β Configurable URIs for Catalyst π
(also hi bestie, this whole page lives in the User Contributed Perl Documentation collection, so you know it's the community's finest handiwork β¨)
πΈ 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 β¨
Okay so literally the whole point: you get to configure whether $c->uri_for and $c->req->uri_with hand you back absolute, hostless or relative URIs β or URIs based on the 'Host' header. It also lets you configure which URI class to use. And the best part? It works application-wide or per-request. Obsessed. π«Ά
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. Because nothing ruins the vibe like a link that just doesn't go anywhere π
To use your own URI class, just subclass URI::SmartURI and set uri_class, or write a class that follows the same interface. Slay.
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!). Not me being polite to your existing config π
There is a minor performance penalty in perls older than 5.10, due to Class::C3, but only at initialization time. So like, a tiny little speed tax, and only once at the start. Nbd fr fr.
π METHODS π
π $c->uri_for
π $c->req->uri_with
Returns a $c->uri_class object (URI::SmartURI by default) in the configured $c->uri_disposition. It's giving exactly what you asked for, no cap β¨
π $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. Cute, right?
π $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. Main character behaviour honestly π
π 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. iykyk π
uri_classβ The class to use for URIs, defaults toURI::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. Live your truth, per request β¨$c->uri_class($class)β Set the URI class to use for$c->uri_forand$c->req->uri_withfor the duration of the request.
π EXTENDING π
$c->prepare_uri actually creates the URI, which you can override. Go off, build your own β¨
π 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. So like, you're never gonna be left on read π«Ά
πΈ 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
The way this is a whole group project and everyone ate π₯
β TODO β
I'd like to extend on Catalyst::Plugin::RequireSSL, and make a plugin that rewrites URIs for actions with an SSL attribute. Manifesting it β¨
π 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.
okay that's the whole page bestie, you're welcome π
this lil number was cooked up as perl v5.34.0, dated 2022-06-09, filed under the User Contributed Perl Documentation section β mwah, go build something cute π
π¦ where this page comes from
- debian bookworm: libcatalyst-plugin-smarturi-perl 0.041-2 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- debian trixie: libcatalyst-plugin-smarturi-perl 0.041-2 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu noble: libcatalyst-plugin-smarturi-perl 0.041-2 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu resolute: libcatalyst-plugin-smarturi-perl 0.041-2 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- ubuntu stonking: libcatalyst-plugin-smarturi-perl 0.041-2 Β· Artistic-1.0-Perl OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms