X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FController.pm;h=f65ee101717fe7eb37fae75284cca851343d3c80;hp=0203b294bccaac7fc517b1b7e77e7c6215abe07d;hb=b62c4f8b4b612b159ff6e02e350a818f6c6ee5c3;hpb=698e6f195c0042787d76387c9c0a9b10ed445e79 diff --git a/lib/Catalyst/Controller.pm b/lib/Catalyst/Controller.pm index 0203b29..f65ee10 100644 --- a/lib/Catalyst/Controller.pm +++ b/lib/Catalyst/Controller.pm @@ -5,8 +5,7 @@ use Class::MOP; use Class::Load ':all'; use String::RewritePrefix; use Moose::Util qw/find_meta/; -use List::Util qw/first/; -use List::MoreUtils qw/uniq/; +use List::Util qw/first uniq/; use namespace::clean -except => 'meta'; BEGIN { @@ -155,6 +154,11 @@ sub _AUTO : Private { my ( $self, $c ) = @_; my @auto = $c->get_actions( 'auto', $c->namespace ); foreach my $auto (@auto) { + # We FORCE the auto action user to explicitly return + # true. We need to do this since there's some auto + # users (Catalyst::Authentication::Credential::HTTP) that + # actually do a detach instead. + $c->state(0); $auto->dispatch( $c ); return 0 unless $c->state; } @@ -657,10 +661,25 @@ arguments, when it is instantiated: From L, stashes the application instance as $self->_application. -=head2 $self->action_for('name') +=head2 $self->action_for($action_name) -Returns the Catalyst::Action object (if any) for a given method name -in this component. +Returns the Catalyst::Action object (if any) for a given action in this +controller or relative to it. You may refer to actions in controllers +nested under the current controllers namespace, or in controllers 'up' +from the current controller namespace. For example: + + package MyApp::Controller::One::Two; + use base 'Catalyst::Controller'; + + sub foo :Local { + my ($self, $c) = @_; + $self->action_for('foo'); # action 'foo' in Controller 'One::Two' + $self->action_for('three/bar'); # action 'bar' in Controller 'One::Two::Three' + $self->action_for('../boo'); # action 'boo' in Controller 'One' + } + +This returns 'undef' if there is no action matching the requested action +name (after any path normalization) so you should check for this as needed. =head2 $self->action_namespace($c) @@ -842,9 +861,9 @@ The following is exactly the same: package MyApp::Controller::Zoo; - sub foo : Local Does('Moo') { ... } # Catalyst::ActionRole:: - sub bar : Local Does('~Moo') { ... } # MyApp::ActionRole::Moo - sub baz : Local Does('+MyApp::ActionRole::Moo') { ... } + sub foo : Local Does('Buzz') { ... } # Catalyst::ActionRole:: + sub bar : Local Does('~Buzz') { ... } # MyApp::ActionRole::Buzz + sub baz : Local Does('+MyApp::ActionRole::Buzz') { ... } =head2 GET @@ -919,6 +938,10 @@ wish to reuse over many actions. See L for more. +B: It is highly recommended to use L for your type constraints over +other options. L exposed a better meta data interface which allows us to +do more and better types of introspection driving tests and debugging. + =head2 Consumes('...') Matches the current action against the content-type of the request. Typically