Fixed: dispatch really works now.
[catagits/Catalyst-Plugin-SubRequest.git] / SubRequest.pm
CommitLineData
aae30f91 1package Catalyst::Plugin::SubRequest;
2
3use strict;
4
5our $VERSION = '0.04';
6
7
8=head1 NAME
9
10Catalyst::Plugin::SubRequest - Make subrequests to actions in Catalyst
11
12=head1 SYNOPSIS
13
14 use Catalyst 'SubRequest';
15
1774feac 16 $c->subreq('/test/foo/bar');
aae30f91 17
18=head1 DESCRIPTION
19
2e5b4f5d 20Make subrequests to actions in Catalyst. Uses the private name of
21the action for dispatch.
aae30f91 22
23=head1 METHODS
24
25=over 4
26
27=item subreq action, args
28
29=item sub_request
30
1774feac 31Takes a full path to a path you'd like to dispatch to.
aae30f91 32
33=back
34
35=cut
36
37*subreq = \&sub_request;
38
39sub sub_request {
1774feac 40 my ( $c, $path ) = @_;
aae30f91 41 my %old_req;
1774feac 42 $path =~ s/^\///;
aae30f91 43 $old_req{stash} = $c->{stash};$c->{stash}={};
44 $old_req{content} = $c->res->output;$c->res->output(undef);
1774feac 45 $old_req{args} = $c->req->arguments;
46 $old_req{action} = $c->req->action;$c->req->action(undef);
47 $old_req{path} = $c->req->path;$c->req->path($path);
48 $c->prepare_action();
aae30f91 49 $c->dispatch();
50 my $output = $c->res->output;
51 $c->{stash} = $old_req{stash};
52 $c->res->output($old_req{content});
53 $c->req->arguments($old_req{args});
54 $c->req->action($old_req{action});
55 return $output;
56}
57
58=head1 SEE ALSO
59
60L<Catalyst>.
61
62=head1 AUTHOR
63
64Marcus Ramberg, C<mramberg@cpan.org>
65
66=head1 THANK YOU
67
68SRI, for writing the awesome Catalyst framework
69
70=head1 COPYRIGHT
71
72This program is free software, you can redistribute it and/or modify it under
73the same terms as Perl itself.
74
75=cut
76
771;