1 package Catalyst::Action;
5 Catalyst::Action - Catalyst Action
9 <form action="[%c.uri_for(c.action)%]">
13 This class represents a Catalyst Action. You can access the object for the
14 currently dispatched action via $c->action. See the L<Catalyst::Dispatcher>
15 for more information on how actions are dispatched. Actions are defined in
16 L<Catalyst::Controller> subclasses.
21 use Scalar::Util 'looks_like_number';
22 with 'MooseX::Emulate::Class::Accessor::Fast';
23 use namespace::clean -except => 'meta';
25 has class => (is => 'rw');
26 has namespace => (is => 'rw');
27 has 'reverse' => (is => 'rw');
28 has attributes => (is => 'rw');
29 has name => (is => 'rw');
30 has code => (is => 'rw');
34 # Stringify to reverse for debug output etc.
35 q{""} => sub { shift->{reverse} },
37 # Codulate to execute to invoke the encapsulated action coderef
38 '&{}' => sub { my $self = shift; sub { $self->execute(@_); }; },
40 # Which action takes precedence
44 # Make general $stuff still work
51 no warnings 'recursion';
53 #__PACKAGE__->mk_accessors(qw/class namespace reverse attributes name code/);
55 sub dispatch { # Execute ourselves against a context
56 my ( $self, $c ) = @_;
57 return $c->execute( $self->class, $self );
66 my ( $self, $c ) = @_;
67 #would it be unreasonable to store the number of arguments
68 #the action has as its own attribute?
69 #it would basically eliminate the code below. ehhh. small fish
70 return 1 unless exists $self->attributes->{Args};
71 my $args = $self->attributes->{Args}[0];
72 return 1 unless defined($args) && length($args);
73 return scalar( @{ $c->req->args } ) == $args;
79 my ($args) = @{ $self->attributes->{Args} || [] };
81 return $args if looks_like_number($args);
89 return $a1->sort_order <=> $a2->sort_order;
92 __PACKAGE__->meta->make_immutable;
102 The sub attributes that are set for this action, like Local, Path, Private
103 and so on. This determines how the action is dispatched to.
107 Returns the class name where this action is defined.
111 Returns a code reference to this action.
113 =head2 dispatch( $c )
115 Dispatch this action against a context
117 =head2 execute( $controller, $c, @args )
119 Execute this action's coderef against a given controller with a given
120 context and arguments
124 Check Args attribute, and makes sure number of args matches the setting.
125 Always returns true if Args is omitted.
129 Returns the value of the C<Args> attribute, or C<~0> if it has no value.
133 Returns C<< $a->sort_order <=> $b->sort_order >> .
137 Returns the private namespace this action lives in.
141 Returns the private path for this action.
145 returns the sub name of this action.
153 Catalyst Contributors, see Catalyst.pm
157 This library is free software. You can redistribute it and/or modify it under
158 the same terms as Perl itself.