From: Tomas Doran Date: Thu, 21 May 2009 13:45:55 +0000 (+0000) Subject: Doc clarification, domm++ X-Git-Tag: 5.80005~35 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=d935773d4dfe52cb48bb18152a868f5266e1f98c Doc clarification, domm++ --- diff --git a/Changes b/Changes index c2ab3a2..3d340cd 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,6 @@ # This file documents the revision history for Perl extension Catalyst. + - Clarify correct techniques for Moose controllers (domm) - Add $c->req->remote_user to disambiguate from $c->req->user (dwc) 5.80004 2009-05-18 17:03:23 diff --git a/lib/Catalyst/Upgrading.pod b/lib/Catalyst/Upgrading.pod index c639b16..0410bcf 100644 --- a/lib/Catalyst/Upgrading.pod +++ b/lib/Catalyst/Upgrading.pod @@ -34,6 +34,17 @@ L in your applications. Declaring actions in Roles is currently unsupported. +=head2 Using Moose in Components + +The correct way to use Moose in a component in a both forward and backwards +compatible way is: + + package TestApp::Controller::Root; + use Moose; + BEGIN { extends 'Catalyst::Component' }; # Or ::Controller, or whatever + +See L. + =head1 Known backwards compatibility breakages =head2 Applications in a single file @@ -104,21 +115,6 @@ with the C< BUILDARGS > method), will not work with Catalyst 5.80 as C inherits from C, and so C< @ISA > fails to linearize. -The fix for this is to not inherit directly from C -yourself. Having components which do not inherit their constructor from -C is B, and has never been recommended, -therefore you're on your own if you're using this technique. You'll need -to detect the version of Catalyst your application is running, and deal -with it appropriately. - -You will also see this issue if you do the following: - - package TestApp::Controller::Example; - use Moose; - use base 'Catalyst::Controller'; - -as C< use base > appends to @ISA. - The correct way to use Moose in a component in a both forward and backwards compatible way is: @@ -129,6 +125,13 @@ compatible way is: Note that the C< extends > declaration needs to occur in a begin block for L to operate correctly. +This way you do not inherit directly from C +yourself. Having components which do not inherit their constructor from +C is B, and has never been recommended, +therefore you're on your own if you're using this technique. You'll need +to detect the version of Catalyst your application is running, and deal +with it appropriately. + You also don't get the L constructor, and therefore attribute initialization will not work as normally expected. If you want to use Moose attributes, then they need to be made lazy to correctly initialize. @@ -140,6 +143,14 @@ attributes work as expected, and the BUILD method is called normally If you depend on Catalyst 5.8, then B Moose features work as expected. +You will also see this issue if you do the following: + + package TestApp::Controller::Example; + use Moose; + use base 'Catalyst::Controller'; + +as C< use base > appends to @ISA. + =head3 use Moose in MyApp Similar to the above, this will also fail: