fixed t/author/spelling.t in lib/Catalyst/Response.pm
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Upgrading.pod
CommitLineData
8c57b129 1=head1 NAME
2
3Catalyst::Upgrading - Instructions for upgrading to the latest Catalyst
4
ba7766f8 5=head1 Upgrading to Catalyst 5.90040
717fc5c9 6
8275d3b9 7=head2 Catalyst::Plugin::Unicode::Encoding is now core
8
9The previously stand alone Unicode support module L<Catalyst::Plugin::Unicode::Encoding>
10has been brought into core as a default plugin. Going forward, all you need is
11to add a configuration setting for the encoding type. For example:
12
13 package Myapp::Web;
14
15 use Catalyst;
16
17 __PACKAGE__->config( encoding => 'UTF-8' );
18
19Please note that this is different from the old stand alone plugin which applied
20C<UTF-8> encoding by default (that is, if you did not set an explicit
21C<encoding> configuration value, it assumed you wanted UTF-8). In order to
22preserve backwards compatibility you will need to explicitly turn it on via the
23configuration setting. THIS MIGHT CHANGE IN THE FUTURE, so please consider
24starting to test your application with proper UTF-8 support and remove all those
25crappy hacks you munged into the code because you didn't know the Plugin
26existed :)
27
28For people that are using the Plugin, you will note a startup warning suggesting
29that you can remove it from the plugin list. When you do so, please remember to
30add the configuration setting, since you can no longer rely on the default being
31UTF-8. We'll add it for you if you continue to use the stand alone plugin and
32we detect this, but this backwards compatibility shim will likely be removed in
33a few releases (trying to clean up the codebase after all).
34
35If you have trouble with any of this, please bring it to the attention of the
36Catalyst maintainer group.
37
38=head2 basic async and event loop support
39
717fc5c9 40This version of L<Catalyst> offers some support for using L<AnyEvent> and
e37f92f5 41L<IO::Async> event loops in your application. These changes should work
42fine for most applications however if you are already trying to perform
43some streaming, minor changes in this area of the code might affect your
4e6e0ab2 44functionality. Please see L<Catalyst::Response\write_fh> for more and for a
45basic example.
8275d3b9 46
47We consider this feature experimental. We will try not to break it, but we
48reserve the right to make necessary changes to fix major issues that people
49run into when the use this functionality in the wild.
717fc5c9 50
ba7766f8 51=head1 Upgrading to Catalyst 5.90030
52
53=head2 Regex dispatch type is deprecated.
54
55The Regex dispatchtype (L<Catalyst::DispatchType::Regex>) has been deprecated.
56
57You are encouraged to move your application to Chained dispatch (L<Catalyst::DispatchType::Chained>).
58
59If you cannot do so, please add a dependency to Catalyst::DispatchType::Regex to your application's
60Makefile.PL
61
dacd8b0e 62=head1 Upgrading to Catalyst 5.9
5d5f4a73 63
e6006848 64The major change is that L<Plack>, a toolkit for using the L<PSGI>
862a7989 65specification, now replaces most of the subclasses of L<Catalyst::Engine>. If
e6006848 66you are using one of the standard subclasses of L<Catalyst::Engine> this
67should be a straightforward upgrade for you. It was a design goal for
68this release to preserve as much backwards compatibility as possible.
69However, since L<Plack> is different from L<Catalyst::Engine>, it is
70possible that differences exist for edge cases. Therefore, we recommend
71that care be taken with this upgrade and that testing should be greater
72than would be the case with a minor point update. Please inform the
73Catalyst developers of any problems so that we can fix them and
74incorporate tests.
5d5f4a73 75
773b3b08 76It is highly recommended that you become familiar with the L<Plack> ecosystem
ae908e7e 77and documentation. Being able to take advantage of L<Plack> development and
78middleware is a major bonus to this upgrade. Documentation about how to
79take advantage of L<Plack::Middleware> by writing your own C<< .psgi >> file
80is contained in L<Catalyst::PSGI>.
5d5f4a73 81
e6006848 82If you have created a custom subclass of L<Catalyst:Engine>, you will
83need to convert it to be a subclass of L<Plack::Handler>.
5d5f4a73 84
85If you are using the L<Plack> engine, L<Catalyst::Engine::PSGI>, this new
773b3b08 86release supersedes that code.
5d5f4a73 87
e6006848 88If you are using a subclass of L<Catalyst::Engine> that is aimed at
89nonstandard or internal/testing uses, such as
90L<Catalyst::Engine::Embeddable>, you should still be able to continue
91using that engine.
5d5f4a73 92
93Advice for specific subclasses of L<Catalyst::Engine> follows:
94
93d60cae 95=head2 Upgrading the FastCGI Engine
5d5f4a73 96
e6006848 97No upgrade is needed if your myapp_fastcgi.pl script is already upgraded
98to use L<Catalyst::Script::FastCGI>.
5d5f4a73 99
93d60cae 100=head2 Upgrading the mod_perl / Apache Engines
5d5f4a73 101
e6006848 102The engines that are built upon the various iterations of mod_perl,
14148e06 103L<Catalyst::Engine::Apache::MP13> (for mod_perl 1, and Apache 1.x) and
862a7989 104L<Catalyst::Engine::Apache2::MP20> (for mod_perl 2, and Apache 2.x),
bd85860b 105should be seamless upgrades and will work using L<Plack::Handler::Apache1>
14148e06 106or L<Plack::Handler::Apache2> as required.
5d5f4a73 107
e6006848 108L<Catalyst::Engine::Apache2::MP19>, however, is no longer supported, as
862a7989 109Plack does not support mod_perl version 1.99. This is unlikely to be a
110problem for anyone, as 1.99 was a brief beta-test release for mod_perl
1112, and all users of mod_perl 1.99 are encouraged to upgrade to a
112supported release of Apache 2 and mod_perl 2.
5d5f4a73 113
93d60cae 114=head2 Upgrading the HTTP Engine
5d5f4a73 115
040835f0 116The default development server that comes with the L<Catalyst> distribution
117should continue to work as expected with no changes as long as your C<myapp_server>
118script is upgraded to use L<Catalyst::Script::HTTP>.
5d5f4a73 119
93d60cae 120=head2 Upgrading the CGI Engine
5d5f4a73 121
697a3e9e 122If you were using L<Catalyst::Engine::CGI> there is no upgrade needed if your
e6006848 123myapp_cgi.pl script is already upgraded to use L<Catalyst::Script::CGI>.
5d5f4a73 124
cf8eab35 125=head2 Upgrading Catalyst::Engine::HTTP::Prefork
5d5f4a73 126
040835f0 127If you were using L<Catalyst::Engine::HTTP::Prefork> then L<Starman>
da9eab5a 128is automatically loaded. You should (at least) change your C<Makefile.PL>
129to depend on Starman.
0ea8962d 130
da9eab5a 131You can regenerate your C<myapp_server.pl> script with C<catalyst.pl>
132and implement a C<MyApp::Script::Server> class that looks like this:
133
134 package MyApp::Script::Server;
135 use Moose;
136 use namespace::autoclean;
137
138 extends 'CatalystX::Script::Server::Starman';
139
140 1;
141
e6006848 142This takes advantage of the new script system, and will add a number of
143options to the standard server script as extra options are added by
144Starman.
da9eab5a 145
146More information about these options can be seen at
147L<CatalystX::Script::Server::Starman/SYNOPSIS>.
148
149An alternate route to implement this functionality is to write a simple .psgi
e6006848 150file for your application, and then use the L<plackup> utility to start the
da9eab5a 151server.
5d5f4a73 152
93d60cae 153=head2 Upgrading the PSGI Engine
5d5f4a73 154
e6006848 155If you were using L<Catalyst::Engine::PSGI>, this new release supersedes
156this engine in supporting L<Plack>. By default the Engine is now always
157L<Plack>. As a result, you can remove the dependency on
158L<Catalyst::Engine::PSGI> in your C<Makefile.PL>.
8f912f0b 159
160Applications that were using L<Catalyst::Engine::PSGI>
161previously should entirely continue to work in this release with no changes.
162
e6006848 163However, if you have an C<app.psgi> script, then you no longer need to
164specify the PSGI engine. Instead, the L<Catalyst> application class now
165has a new method C<psgi_app> which returns a L<PSGI> compatible coderef
166which you can wrap in the middleware of your choice.
8f912f0b 167
168Catalyst will use the .psgi for your application if it is located in the C<home>
e6006848 169directory of the application.
697a3e9e 170
93a57b4b 171For example, if you were using L<Catalyst::Engine::PSGI> in the past, you will
8f912f0b 172have written (or generated) a C<script/myapp.psgi> file similar to this one:
697a3e9e 173
174 use Plack::Builder;
175 use MyCatalytApp;
176
177 MyCatalystApp->setup_engine('PSGI');
178
179 builder {
180 enable ... # enable your desired middleware
181 sub { MyCatalystApp->run(@_) };
182 };
183
8f912f0b 184Instead, you now say:
697a3e9e 185
186 use Plack::Builder;
187 use MyCatalystApp;
188
189 builder {
190 enable ... #enable your desired middleware
75d68821 191 MyCatalystApp->psgi_app;
697a3e9e 192 };
5d5f4a73 193
34effbc7 194In the simplest case:
8f912f0b 195
34effbc7 196 MyCatalystApp->setup_engine('PSGI');
197 my $app = sub { MyCatalystApp->run(@_) }
198
199becomes
200
34effbc7 201 my $app = MyCatalystApp->psgi_app(@_);
202
203B<NOT>:
204
205 my $app = sub { MyCatalystApp->psgi_app(@_) };
206 # If you make ^^ this mistake, your app won't work, and will confuse the hell out of you!
207
e6006848 208You can now move C<< script/myapp.psgi >> to C<< myapp.psgi >>, and the built-in
773b3b08 209Catalyst scripts and your test suite will start using your .psgi file.
ad15c817 210
e6006848 211B<NOTE:> If you rename your .psgi file without these modifications, then
212any tests run via L<Catalyst::Test> will not be compatible with the new
213release, and will result in the development server starting, rather than
214the expected test running.
93a57b4b 215
c47cd2ce 216B<NOTE:> If you are directly accessing C<< $c->req->env >> to get the PSGI
217environment then this accessor is moved to C<< $c->engine->env >>,
218you will need to update your code.
219
e6006848 220=head2 Engines which are known to be broken
93a57b4b 221
e6006848 222The following engines B<DO NOT> work as of Catalyst version 5.9. The
223core team will be happy to work with the developers and/or users of
224these engines to help them port to the new Plack/Engine system, but for
225now, applications which are currently using these engines B<WILL NOT>
226run without modification to the engine code.
93a57b4b 227
228=over
229
230=item Catalyst::Engine::Wx
231
ad15c817 232=item Catalyst::Engine::Zeus
233
234=item Catalyst::Engine::JobQueue::POE
235
236=item Catalyst::Engine::XMPP2
237
238=item Catalyst::Engine::SCGI
239
93a57b4b 240=back
241
5d5f4a73 242=head2 Engines with unknown status
243
e6006848 244The following engines are untested or have unknown compatibility.
245Reports are highly encouraged:
5d5f4a73 246
ad15c817 247=over
248
249=item Catalyst::Engine::Mojo
250
e6006848 251=item Catalyst::Engine::Server (marked as Deprecated)
ad15c817 252
e6006848 253=item Catalyst::Engine::HTTP::POE (marked as Deprecated)
ad15c817 254
255=back
5d5f4a73 256
3f22de0b 257=head2 Plack functionality
040835f0 258
3f22de0b 259See L<Catalyst::PSGI>.
0aafa77a 260
dacd8b0e 261=head2 Tests in 5.9
4db14a9a 262
e6006848 263Tests should generally work the same in Catalyst 5.9, but there are
264some differences.
4db14a9a 265
e6006848 266Previously, if using L<Catalyst::Test> and doing local requests (against
267a local server), if the application threw an exception then this
268exception propagated into the test.
4db14a9a 269
e6006848 270This behavior has been removed, and now a 500 response will be returned
271to the test. This change standardizes behavior, so that local test
272requests behave similarly to remote requests.
4db14a9a 273
7e2ec16e 274=head1 Upgrading to Catalyst 5.80
275
5687c7f9 276Most applications and plugins should run unaltered on Catalyst 5.80.
7e2ec16e 277
8f61d649 278However, a lot of refactoring work has taken place, and several changes have
1a98f036 279been made which could cause incompatibilities. If your application or plugin
8f61d649 280is using deprecated code, or relying on side effects, then you could have
ba03ccca 281issues upgrading to this release.
5687c7f9 282
cf8eab35 283Most issues found with existing components have been easy to
8f61d649 284solve. This document provides a complete description of behavior changes
285which may cause compatibility issues, and of new Catalyst warnings which
773b3b08 286might be unclear.
7e2ec16e 287
8f61d649 288If you think you have found an upgrade-related issue which is not covered in
289this document, please email the Catalyst list to discuss the problem.
7e2ec16e 290
85f0a66f 291=head1 Moose features
292
8f61d649 293=head2 Application class roles
85f0a66f 294
8f61d649 295You can only apply method modifiers after the application's C<< ->setup >>
85f0a66f 296method has been called. This means that modifiers will not work with methods
773b3b08 297run during the call to C<< ->setup >>.
85f0a66f 298
a6eb852a 299See L<Catalyst::Manual::ExtendingCatalyst> for more information about using
300L<Moose> in your applications.
301
85f0a66f 302=head2 Controller actions in Moose roles
303
d76c88f3 304You can use L<MooseX::MethodAttributes::Role> if you want to declare actions
305inside Moose roles.
85f0a66f 306
d935773d 307=head2 Using Moose in Components
308
309The correct way to use Moose in a component in a both forward and backwards
310compatible way is:
311
312 package TestApp::Controller::Root;
313 use Moose;
314 BEGIN { extends 'Catalyst::Component' }; # Or ::Controller, or whatever
315
316See L<Components which inherit from Moose::Object before Catalyst::Component>.
317
8f61d649 318=head1 Known backwards compatibility breakages
7e2ec16e 319
8f61d649 320=head2 Applications in a single file
85f0a66f 321
322Applications must be in their own file, and loaded at compile time. This
8f61d649 323issue generally only affects the tests of CPAN distributions. Your
324application will fail if you try to define an application inline in a
325block, and use plugins which supply a C< new > method, then use that
326application latter in tests within the same file.
85f0a66f 327
328This is due to the fact that Catalyst is inlining a new method on your
8f61d649 329application class allowing it to be compatible with Moose. The method
330used to do this changed in 5.80004 to avoid the possibility of reporting
331an 'Unknown Error' if your application failed to compile.
85f0a66f 332
38f90e49 333=head2 Issues with Class::C3
334
8f61d649 335Catalyst 5.80 uses the L<Algorithm::C3> method dispatch order. This is
336built into Perl 5.10, and comes via L<Class::C3> for Perl 5.8. This
337replaces L<NEXT> with L<Class::C3::Adopt::NEXT>, forcing all components
338to resolve methods using C3, rather than the unpredictable dispatch
339order of L<NEXT>.
38f90e49 340
cf8eab35 341This issue manifests itself by your application failing to start due to an
5d06547d 342error message about having a non-linear @ISA.
343
8f61d649 344The Catalyst plugin most often causing this is
345L<Catalyst::Plugin::Session::Store::FastMmap> - if you are using this
346plugin and see issues, then please upgrade your plugins, as it has been
347fixed. Note that Makefile.PL in the distribution will warn about known
348incompatible components.
5d06547d 349
350This issue can, however, be found in your own application - the only solution is
351to go through each base class of the class the error was reported against, until
352you identify the ones in conflict, and resolve them.
353
354To be able to generate a linear @ISA, the list of superclasses for each
355class must be resolvable using the C3 algorithm. Unfortunately, when
356superclasses are being used as mixins (to add functionality used in your class),
ae7da8f5 357and with multiple inheritance, it is easy to get this wrong.
38f90e49 358
359Most common is the case of:
360
361 package Component1; # Note, this is the common case
362 use base qw/Class::Accessor::Fast Class::Data::Inheritable/;
363
8f61d649 364 package Component2; # Accidentally saying it this way causes a failure
38f90e49 365 use base qw/Class::Data::Inheritable Class::Accessor::Fast/;
366
367 package GoesBang;
368 use base qw/Component1 Component2/;
369
5d06547d 370Any situation like this will cause your application to fail to start.
38f90e49 371
8f61d649 372For additional documentation about this issue, and how to resolve it, see
5d06547d 373L<Class::C3::Adopt::NEXT>.
38f90e49 374
6f04e56a 375=head2 Components which inherit from Moose::Object before Catalyst::Component
7e2ec16e 376
6f04e56a 377Moose components which say:
7e2ec16e 378
6f04e56a 379 package TestApp::Controller::Example;
380 use Moose;
845bfcd2 381 extends qw/Moose::Object Catalyst::Component/;
7e2ec16e 382
8f61d649 383to use the constructor provided by Moose, while working (if you do some hacks
1a98f036 384with the C< BUILDARGS > method), will not work with Catalyst 5.80 as
6f04e56a 385C<Catalyst::Component> inherits from C<Moose::Object>, and so C< @ISA > fails
25f61108 386to linearize.
6f04e56a 387
6f04e56a 388The correct way to use Moose in a component in a both forward and backwards
389compatible way is:
390
391 package TestApp::Controller::Root;
392 use Moose;
393 BEGIN { extends 'Catalyst::Component' }; # Or ::Controller, or whatever
394
ba03ccca 395Note that the C< extends > declaration needs to occur in a begin block for
3df46b1b 396L<attributes> to operate correctly.
397
d935773d 398This way you do not inherit directly from C<Moose::Object>
399yourself. Having components which do not inherit their constructor from
400C<Catalyst::Component> is B<unsupported>, and has never been recommended,
401therefore you're on your own if you're using this technique. You'll need
402to detect the version of Catalyst your application is running, and deal
403with it appropriately.
404
eaae9a92 405You also don't get the L<Moose::Object> constructor, and therefore attribute
406initialization will not work as normally expected. If you want to use Moose
3df46b1b 407attributes, then they need to be made lazy to correctly initialize.
408
409Note that this only applies if your component needs to maintain component
410backwards compatibility for Catalyst versions before 5.71001 - in 5.71001
411attributes work as expected, and the BUILD method is called normally
eaae9a92 412(although BUILDARGS is not).
3df46b1b 413
414If you depend on Catalyst 5.8, then B<all> Moose features work as expected.
8566c0de 415
d935773d 416You will also see this issue if you do the following:
417
418 package TestApp::Controller::Example;
419 use Moose;
420 use base 'Catalyst::Controller';
421
422as C< use base > appends to @ISA.
423
e11cac87 424=head3 use Moose in MyApp
425
426Similar to the above, this will also fail:
427
428 package MyApp;
429 use Moose;
430 use Catalyst qw/
431 ConfigLoader
432 /;
433 __PACKAGE__->setup;
434
435If you need to use Moose in your application class (e.g. for method modifiers
8f61d649 436etc.) then the correct technique is:
e11cac87 437
438 package MyApp;
439 use Moose;
5b6f82d2 440 use Catalyst;
441
e11cac87 442 extends 'Catalyst';
5b6f82d2 443
444 __PACKAGE__->config( name => 'MyApp' );
e11cac87 445 __PACKAGE__->setup(qw/
446 ConfigLoader
447 /);
448
04a48104 449=head2 Anonymous closures installed directly into the symbol table
450
451If you have any code which installs anonymous subroutine references directly
452into the symbol table, you may encounter breakages. The simplest solution is
453to use L<Sub::Name> to name the subroutine. Example:
454
e11cac87 455 # Original code, likely to break:
1a98f036 456 my $full_method_name = join('::', $package_name, $method_name);
04a48104 457 *$full_method_name = sub { ... };
458
e11cac87 459 # Fixed Code
04a48104 460 use Sub::Name 'subname';
461 my $full_method_name = join('::',$package_name, $method_name);
462 *$full_method_name = subname $full_method_name, sub { ... };
463
8f61d649 464Additionally, you can take advantage of Catalyst's use of L<Class::MOP> and
465install the closure using the appropriate metaclass. Example:
04a48104 466
467 use Class::MOP;
468 my $metaclass = Moose::Meta::Class->initialize($package_name);
469 $metaclass->add_method($method_name => sub { ... });
470
780654ad 471=head2 Hooking into application setup
472
8f61d649 473To execute code during application start-up, the following snippet in MyApp.pm
780654ad 474used to work:
475
476 sub setup {
477 my ($class, @args) = @_;
478 $class->NEXT::setup(@args);
479 ... # things to do after the actual setup
480 }
481
8f61d649 482With Catalyst 5.80 this won't work anymore, because Catalyst no longer
483uses NEXT.pm for method resolution. The functionality was only ever
484originally operational as L<NEXT> remembers what methods have already
485been called, and will not call them again.
780654ad 486
1a98f036 487Using this now causes infinite recursion between MyApp::setup and
488Catalyst::setup, due to other backwards compatibility issues related to how
e6c5b548 489plugin setup works. Moose method modifiers like C<< before|after|around setup
1a98f036 490=> sub { ... }; >> also will not operate correctly on the setup method.
780654ad 491
492The right way to do it is this:
493
494 after setup_finalize => sub {
495 ... # things to do after the actual setup
496 };
497
ade00972 498The setup_finalize hook was introduced as a way to avoid this issue.
1a98f036 499
e11cac87 500=head2 Components with a new method which returns false
7e2ec16e 501
8dd2f514 502Previously, if you had a component which inherited from Catalyst::COMPONENT,
8f61d649 503but overrode the new method to return false, then your class's configuration
8dd2f514 504would be blessed into a hash on your behalf, and this would be returned from
a87f5aa5 505the COMPONENT method.
7e2ec16e 506
8f61d649 507This behavior makes no sense, and so has been removed. Implementing your own
508C< new > method in components is B<highly> discouraged. Instead, you should
509inherit the new method from Catalyst::Component, and use Moose's BUILD
1a98f036 510functionality and/or Moose attributes to perform any construction work
511necessary for your class.
7e2ec16e 512
513=head2 __PACKAGE__->mk_accessor('meta');
514
e11cac87 515Won't work due to a limitation of L<Moose>. This is currently being fixed
516inside Moose.
7e2ec16e 517
518=head2 Class::Data::Inheritable side effects
519
8dd2f514 520Previously, writing to a class data accessor would copy the accessor method
521down into your package.
522
8f61d649 523This behavior has been removed. While the class data is still stored
8dd2f514 524per-class, it is stored on the metaclass of the class defining the accessor.
7e2ec16e 525
8f61d649 526Therefore anything relying on the side effect of the accessor being copied down
8dd2f514 527will be broken.
7e2ec16e 528
1a98f036 529The following test demonstrates the problem:
8dd2f514 530
531 {
532 package BaseClass;
533 use base qw/Class::Data::Inheritable/;
534 __PACKAGE__->mk_classdata('foo');
535 }
536
537 {
538 package Child;
539 use base qw/BaseClass/;
540 }
541
542 BaseClass->foo('base class');
543 Child->foo('sub class');
eaae9a92 544
e11cac87 545 use Test::More;
8dd2f514 546 isnt(BaseClass->can('foo'), Child->can('foo'));
7e2ec16e 547
f4dda4a8 548=head2 Extending Catalyst::Request or other classes in an ad hoc manner using mk_accessors
7e2ec16e 549
8dd2f514 550Previously, it was possible to add additional accessors to Catalyst::Request
551(or other classes) by calling the mk_accessors class method.
7e2ec16e 552
8f61d649 553This is no longer supported - users should make a subclass of the class whose
554behavior they would like to change, rather than globally polluting the
e11cac87 555Catalyst objects.
8be895a7 556
10011c19 557=head2 Confused multiple inheritance with Catalyst::Component::COMPONENT
8be895a7 558
8f61d649 559Previously, Catalyst's COMPONENT method would delegate to the method on
560the right hand side, which could then delegate back again with
561NEXT. This is poor practice, and in addition, makes no sense with C3
562method dispatch order, and is therefore no longer supported.
bcc773b9 563
ba03ccca 564If a COMPONENT method is detected in the inheritance hierarchy to the right
bcc773b9 565hand side of Catalyst::Component::COMPONENT, then the following warning
566message will be emitted:
7e2ec16e 567
8dd2f514 568 There is a COMPONENT method resolving after Catalyst::Component
5687c7f9 569 in ${next_package}.
8dd2f514 570
8f61d649 571The correct fix is to re-arrange your class's inheritance hierarchy so that the
bcc773b9 572COMPONENT method you would like to inherit is the first (left-hand most)
573COMPONENT method in your @ISA.
7e2ec16e 574
7e9340de 575=head2 Development server relying on environment variables
576
577Previously, the development server would allow propagation of system
578environment variables into the request environment, this has changed with the
579adoption of Plack. You can use L<Plack::Middleware::ForceEnv> to achieve the
580same effect.
581
c571d2c8 582=head1 WARNINGS
583
63b546b1 584=head2 Actions in your application class
585
586Having actions in your application class will now emit a warning at application
e256d0e1 587startup as this is deprecated. It is highly recommended that these actions are moved
63b546b1 588into a MyApp::Controller::Root (as demonstrated by the scaffold application
55dd186c 589generated by catalyst.pl).
da73c6af 590
e256d0e1 591This warning, also affects tests. You should move actions in your test,
592creating a myTest::Controller::Root, like the following example:
da73c6af 593
594 package MyTest::Controller::Root;
95a52a01 595
da73c6af 596 use strict;
597 use warnings;
95a52a01 598
da73c6af 599 use parent 'Catalyst::Controller';
95a52a01 600
da73c6af 601 __PACKAGE__->config(namespace => '');
95a52a01 602
da73c6af 603 sub action : Local {
604 my ( $self, $c ) = @_;
605 $c->do_something;
606 }
95a52a01 607
da73c6af 608 1;
63b546b1 609
ac9279b0 610=head2 ::[MVC]:: naming scheme
611
612Having packages called MyApp::[MVC]::XX is deprecated and can no longer be generated
613by catalyst.pl
614
615This is still supported, but it is recommended that you rename your application
616components to Model/View/Controller.
617
618A warning will be issued at application startup if the ::[MVC]:: naming scheme is
619in use.
620
ade00972 621=head2 Catalyst::Base
622
8f61d649 623Any code using L<Catalyst::Base> will now emit a warning; this
624module will be removed in a future release.
ade00972 625
c571d2c8 626=head2 Methods in Catalyst::Dispatcher
627
8f61d649 628The following methods in Catalyst::Dispatcher are implementation
629details, which may change in the 5.8X release series, and therefore their use
bcc773b9 630is highly deprecated.
c571d2c8 631
632=over
633
8dd2f514 634=item tree
c571d2c8 635
8dd2f514 636=item dispatch_types
c571d2c8 637
8dd2f514 638=item registered_dispatch_types
c571d2c8 639
8dd2f514 640=item method_action_class
c571d2c8 641
8dd2f514 642=item action_hash
c571d2c8 643
644=item container_hash
645
646=back
647
648The first time one of these methods is called, a warning will be emitted:
7e2ec16e 649
bcc773b9 650 Class $class is calling the deprecated method Catalyst::Dispatcher::$public_method_name,
dacd8b0e 651 this will be removed in Catalyst 5.9
7e2ec16e 652
c571d2c8 653You should B<NEVER> be calling any of these methods from application code.
654
8f61d649 655Plugin authors and maintainers whose plugins currently call these methods
8f5a2bd9 656should change to using the public API, or, if you do not feel the public API
8f61d649 657adequately supports your use case, please email the development list to
8f5a2bd9 658discuss what API features you need so that you can be appropriately supported.
7e2ec16e 659
95b20422 660=head2 Class files with names that don't correspond to the packages they define
7e2ec16e 661
e11cac87 662In this version of Catalyst, if a component is loaded from disk, but no
ba03ccca 663symbols are defined in that component's name space after it is loaded, this
bcc773b9 664warning will be issued:
7e2ec16e 665
bcc773b9 666 require $class was successful but the package is not defined.
7e2ec16e 667
8f61d649 668This is to protect against confusing bugs caused by mistyping package names,
bcc773b9 669and will become a fatal error in a future version.
670
671Please note that 'inner packages' (via L<Devel::InnerPackage>) are still fully
8f61d649 672supported; this warning is only issued when component file naming does not map
bcc773b9 673to B<any> of the packages defined within that component.
7e2ec16e 674
5687c7f9 675=head2 $c->plugin method
676
25f61108 677Calling the plugin method is deprecated, and calling it at run time is B<highly
8dd2f514 678deprecated>.
7e2ec16e 679
95a52a01 680Instead you are recommended to use L<Catalyst::Model::Adaptor> or similar to
ba03ccca 681compose the functionality you need outside of the main application name space.
7e2ec16e 682
4e68badc 683Calling the plugin method will not be supported past Catalyst 5.81.
bcc773b9 684
7e2ec16e 685=cut
4e68badc 686