[Catalyst-commits] r7264 -
trunk/examples/CatalystAdvent/root/2007/pen
purge at dev.catalyst.perl.org
purge at dev.catalyst.perl.org
Mon Dec 10 22:56:51 GMT 2007
Author: purge
Date: 2007-12-10 22:56:50 +0000 (Mon, 10 Dec 2007)
New Revision: 7264
Modified:
trunk/examples/CatalystAdvent/root/2007/pen/5.pod
Log:
pod fixes
Modified: trunk/examples/CatalystAdvent/root/2007/pen/5.pod
===================================================================
--- trunk/examples/CatalystAdvent/root/2007/pen/5.pod 2007-12-10 22:30:07 UTC (rev 7263)
+++ trunk/examples/CatalystAdvent/root/2007/pen/5.pod 2007-12-10 22:56:50 UTC (rev 7264)
@@ -4,75 +4,84 @@
The basic premise behind uri_for is to make generating URIs for actions with parameters easy and fun (well as fun as URIs get).
=head2 Basic uri_for
-$c->uri_for will return the URL for the current actions namespace, so, if you are in Controller MyApp::Children it will return
+$c->uri_for will return the URL for the current actions namespace, so, if you are in Controller MyApp::Children it will return:
+
+ $c->uri_for()
http://localhost:3000/children
for any action you are running in that controller.
If you wanted to get to a specific action you can do
- $c->uri_for('good') which would give you http://localhost:3000/child/good
+ $c->uri_for('good')
+ http://localhost:3000/child/good
-What if I wanted to get outside of the 'child' namespace? well, use a / to root it :
+What if I wanted to get outside of the 'child' namespace? well, use a / to root it.
$c->uri_for('/elves')
http://localhost:3000/elves
-For most cases this simple construct is more than adequate but a more canonical way is via the action_for construct for instance, If in my controller i have
+For most cases this simple construct is more than adequate but a more canonical way is via the action_for construct for instance, If in my controller i have:
sub deliverto :Path('good') {
...
}
-I could refer to this action in the current namespace as follows
+I could refer to this action in the current namespace as follows:
- $c->uri_for($c.action_for('deliverto'))
+ $c->uri_for($c->action_for('deliverto'))
http://localhost:3000/children/good
+
+Or in another namespace
+ $c->uri_for($c->controller('elves')->action_for('sweatshop'))
+ http://localhost:3000/elves/jobs
+
If, in the future i decided to change my URI structure all the references to this controller would update accordingly.
-This technique also has other uses we will come to later.
-
=head2 Adding parameters
You can easily add parameters to the uri_for object like this:
$c->uri_for('house',{fire => 0, mincepie => 1});
- http://localhost:3000/house?chimney=0&mincepie=1
+ http://localhost:3000/house?fire=0&mincepie=1
or even in a TT template:
[% c.uri_for('house',{fire => 0, mincepie => 1}) %]
- http://localhost:3000/house?chimney=0&mincepie=1
+ http://localhost:3000/house?fire=0&mincepie=1
or you could use the params that were passed into the page to re-populate it
- [% c.uri_for('bar',c.req.params) %]
- http://localhost:3000/bar?a=b&c=d (assuming parameters passed in to page were a=b c=d)
+ $c->uri_for('house',$c->req->params) %]
+ http://localhost:3000/house/?a=b&c=d (assuming parameters passed in to page were a=b c=d)
=head2 Complex paths with captures
-uri_for makes it incredibly easy to create and adjust paths for chained actions, for instance
+uri_for makes it incredibly easy to create and adjust paths for chained actions, for instance from
+
+ http://localhost:3000/house/4/address
+
+ $c->uri_for($c->action,$c->req->captures,'print');
- $c.uri_for($c.action,$c.req.captures,'print');
+would fill out all the captures for the previous request and add print to it:
-would fill out all the captures in the current uri and add new to it
-http://localhost:3000/house/4/address/print
+ http://localhost:3000/house/4/address/print
-But what if you wanted to change some of the captures... say for linking from a list - well it's just an array so thats easy :
+But what if you wanted to change some of the captures... say for linking from a list - well it's just an array so thats easy:
- $c.uri_for($c.action,[2],'new');
+ $c->uri_for($c->action,[2],'new');
http://localhost:3000/house/2/address/print
=head2 uri_for internals
-uri_for returns a normalised URI object so you can do all the usual tricks, for instance, say you were wanting to go to a secure section of your catalyst site you could do the following :
+uri_for returns a normalised L<URI> object so you can do all the usual tricks, for instance, say you were wanting to go to a secure section of your catalyst site you could do the following :
- my $uri = c.uri_for('secure');
+ my $uri = $c->uri_for('secure');
$uri->scheme('https');
https://localhost:3000/letters/list
-=head2 useful code snippets
+=head2 Useful code snippets
You could add these in your root controller to make them available for all your actions.
(thanks zamolxes!)
@@ -92,12 +101,6 @@
$c->redirect_to_action('User','login');
-=head2 Links to documentation
-
-B<URI>
-
-B<Catalyst>
-
=head1 AUTHOR
Simon Elliott (purge, cpan at browsing.co.uk)
More information about the Catalyst-commits
mailing list