1 package Catalyst::Plugin::SubRequest;
11 Catalyst::Plugin::SubRequest - Make subrequests to actions in Catalyst
15 use Catalyst 'SubRequest';
17 my $res_body = $c->subreq('/test/foo/bar', { template => 'magic.tt' });
19 my $res_body = $c->subreq( {
20 path => '/test/foo/bar',
23 template => 'magic.tt'
26 # Get the full response object
27 my $res = $c->subreq_res('/test/foo/bar', {
28 template => 'mailz.tt'
32 $c->log->warn( $res->content_type );
36 Make subrequests to actions in Catalyst. Uses the catalyst
37 dispatcher, so it will work like an external url call.
38 Methods are provided both to get the body of the response and the full
39 response (L<Catalyst::Response>) object.
45 =item subreq [path as string or hash ref], [stash as hash ref], [parameters as hash ref]
51 Takes a full path to a path you'd like to dispatch to.
53 If the path is passed as a hash ref then it can include body, action,
56 An optional second argument as hashref can contain data to put into the
57 stash of the subrequest.
59 An optional third argument as hashref can contain data to pass as
60 parameters to the subrequest.
62 Returns the body of the response.
64 =item subreq_res [path as string or hash ref], [stash as hash ref], [parameters as hash ref]
66 =item subrequest_response
68 =item sub_request_response
70 Like C<sub_request()>, but returns a full L<Catalyst::Response> object.
76 *subreq = \&sub_request;
77 *subrequest = \&sub_request;
78 *subreq_res = \&sub_request_response;
79 *subrequest_response = \&sub_request_response;
82 return shift->sub_request_response( @_ )->body ;
85 sub sub_request_response {
86 my ( $c, $path, $stash, $params ) = @_;
88 my $env = $c->request->env;
89 my $req = Plack::Request->new($env);
91 $uri->query_form($params||{});
92 $env->{QUERY_STRING} = $uri->query||'';
93 local $env->{PATH_INFO} = $path;
94 local $env->{REQUEST_URI} = $env->{SCRIPT_NAME} . $path;
95 $env->{REQUEST_URI} =~ s|//|/|g;
96 my $response_cb = $c->response->_response_cb;
97 my $class = ref($c) || $c;
100 begin => 'subrequest: ' . $path,
104 my $i_ctx = $class->prepare(env => $env, response_cb => $response_cb);
105 $i_ctx->stash($stash);
109 $c->stats->profile( end => 'subrequest: ' . $path ) if $c->debug;
111 return $i_ctx->response;
120 Marcus Ramberg, C<mramberg@cpan.org>
122 Tomas Doran (t0m) C<< bobtfish@bobtfish.net >>
126 Eden Cardim (edenc) C<eden@insoli.de>
130 SRI, for writing the awesome Catalyst framework
132 MIYAGAWA, for writing the awesome Plack toolkit
136 Copyright (c) 2005 - 2011
137 the Catalyst::Plugin::SubRequest L</AUTHORS>
142 This program is free software, you can redistribute it and/or modify it under
143 the same terms as Perl itself.