X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FManual%2FCookbook.pod;h=96be5315fb46aff90e56859c2069705e418c1d41;hb=32cebe9b3da2a60f5b8fa62d15ba866ede0994f8;hp=1e0832b5589b2d4b8a435307bd25a14634eec9d1;hpb=76776098d4731f120ecb88210b29a4496063e097;p=catagits%2FCatalyst-Manual.git diff --git a/lib/Catalyst/Manual/Cookbook.pod b/lib/Catalyst/Manual/Cookbook.pod index 1e0832b..96be531 100644 --- a/lib/Catalyst/Manual/Cookbook.pod +++ b/lib/Catalyst/Manual/Cookbook.pod @@ -33,9 +33,12 @@ to go into this C method; see L). if ( scalar @{ $c->error } ) { $c->stash->{errors} = $c->error; + for my $error ( @{ $c->error } ) { + $c->log->error($error); + } $c->stash->{template} = 'errors.tt'; $c->forward('MyApp::View::TT'); - $c->error(0); + $c->clear_errors; } return 1 if $c->response->status =~ /^3\d\d$/; @@ -569,7 +572,7 @@ root of your app (but not in any other controller). =head1 Models -Models are where application data belongs. Catalyst is exteremely +Models are where application data belongs. Catalyst is extremely flexible with the kind of models that it can use. The recipes here are just the start. @@ -586,7 +589,7 @@ write a simple component in Catalyst that slurps in an outside Model: __PACKAGE__->config( schema_class => 'Some::DBIC::Schema', - connect_info => ['dbi:SQLite:foo.db', '', '', {AutoCommit=>1}]; + connect_info => ['dbi:SQLite:foo.db', '', '', {AutoCommit=>1}], ); 1; @@ -958,47 +961,13 @@ L =head2 Adding RSS feeds Adding RSS feeds to your Catalyst applications is simple. We'll see two -different aproaches here, but the basic premise is that you forward to +different approaches here, but the basic premise is that you forward to the normal view action first to get the objects, then handle the output differently. -=head3 Using TT templates - -This is the aproach used in Agave (L). - - sub rss : Local { - my ($self,$c) = @_; - $c->forward('view'); - $c->stash->{template}='rss.tt'; - } - -Then you need a template. Here's the one from Agave: - - - - - [ [% blog.name || c.config.name || "Agave" %] ] RSS Feed - [% base %] - Recent posts - en-us - 40 - [% WHILE (post = posts.next) %] - - [% post.title %] - [% post.formatted_teaser|html%] - [% post.pub_date %] - [% post.full_uri %] - [% post.full_uri %] - [% post.author.screenname %] - - [% END %] - - - =head3 Using XML::Feed -A more robust solution is to use L, as was done in the Catalyst -Advent Calendar. Assuming we have a C action that populates +Assuming we have a C action that populates 'entries' with some DBIx::Class iterator, the code would look something like this: @@ -1022,10 +991,10 @@ like this: $c->res->body( $feed->as_xml ); } -A little more code in the controller, but with this approach you're +With this approach you're pretty sure to get something that validates. -Note that for both of the above aproaches, you'll need to set the +Note that for both of the above approaches, you'll need to set the content type like this: $c->res->content_type('application/rss+xml'); @@ -1366,7 +1335,7 @@ even though there are two different methods of looking up a track. This technique can be expanded as needed to fulfil your requirements - for example, if you inherit the first action of a chain from a base class, then mixing in a -different base class can be used to duplicate an entire URL hieratchy at a different +different base class can be used to duplicate an entire URL hierarchy at a different point within your application. =head2 Component-based Subrequests @@ -1562,7 +1531,7 @@ the same Apache instance because the namespaces will collide. =head4 Cannot run different versions of libraries. -If you have two differnet applications which run on the same machine, +If you have two different applications which run on the same machine, which need two different versions of a library then the only way to do this is to have per-vhost perl interpreters (with different library paths). This is entirely possible, but nullifies all the memory sharing benefits that @@ -2355,7 +2324,7 @@ C environment variable is true. mundus:~/MyApp chansen$ cat t/01app.t | perl -ne 'printf( "%2d %s", $., $_ )' 1 use Test::More tests => 2; - 2 use_ok( Catalyst::Test, 'MyApp' ); + 2 BEGIN { use_ok( Catalyst::Test, 'MyApp' ) } 3 4 ok( request('/')->is_success ); @@ -2420,7 +2389,7 @@ Be sure to check out C. It makes it easy to test HTML, forms and links. A short example of usage: use Test::More tests => 6; - use_ok( Test::WWW::Mechanize::Catalyst, 'MyApp' ); + BEGIN { use_ok( Test::WWW::Mechanize::Catalyst, 'MyApp' ) } my $mech = Test::WWW::Mechanize::Catalyst->new; $mech->get_ok("http://localhost/", 'Got index page'); @@ -2435,7 +2404,7 @@ test HTML, forms and links. A short example of usage: =item Catalyst::Test -L +L =item Test::WWW::Mechanize::Catalyst