my $begin = ( $c->get_actions( 'begin', $c->namespace ) )[-1];
return 1 unless $begin;
$begin->dispatch( $c );
- return !@{ $c->error };
+ #If there is an error, all bets off
+ if( @{ $c->error }) {
+ return !@{ $c->error };
+ } else {
+ return $c->state || 1;
+ }
}
sub _AUTO : Private {
$auto->dispatch( $c );
return 0 unless $c->state;
}
- return 1;
+ return $c->state || 1;
}
sub _ACTION : Private {
{
$c->action->dispatch( $c );
}
- return !@{ $c->error };
+ #If there is an error, all bets off
+ if( @{ $c->error }) {
+ return !@{ $c->error };
+ } else {
+ return $c->state || 1;
+ }
}
sub _END : Private {
sub my_moose_type :Local Args('Int') { ... }
+If you use 'reference' type constraints (such as ArrayRef[Int]) that have an unknown
+number of allowed matches, we set this the same way "Args" is. Please keep in mind
+that actions with an undetermined number of args match at lower precedence than those
+with a fixed number. You may use reference types such as Tuple from L<Types::Standard>
+that allows you to fix the number of allowed args. For example Args(Tuple[Int,Int])
+would be determined to be two args (or really the same as Args(Int,Int).) You may
+find this useful for creating custom subtypes with complex matching rules that you
+wish to reuse over many actions.
+
See L<Catalyst::RouteMatching> for more.
=head2 Consumes('...')