.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Plack::Middleware::Recursive 3pm" .TH Plack::Middleware::Recursive 3pm 2024-01-20 "perl v5.38.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NAME Plack::Middleware::Recursive \- Allows PSGI apps to include or forward requests recursively .SH SYNOPSIS .IX Header "SYNOPSIS" .Vb 2 \& # with Builder \& enable "Recursive"; \& \& # in apps \& my $res = $env\->{\*(Aqplack.recursive.include\*(Aq}\->("/new_path"); \& \& # Or, use exceptions \& my $app = sub { \& # ... \& Plack::Recursive::ForwardRequest\->throw("/new_path"); \& }; .Ve .SH DESCRIPTION .IX Header "DESCRIPTION" Plack::Middleware::Recursive allows PSGI applications to recursively include or forward requests to other paths. Applications can make use of callbacks stored in \f(CW\*(C`$env\->{\*(Aqplack.recursive.include\*(Aq}\*(C'\fR to \&\fIinclude\fR another path to get the response (whether it's an array ref or a code ref depending on your application), or throw an exception Plack::Recursive::ForwardRequest anywhere in the code to \fIforward\fR the current request (i.e. abort the current and redo the request). .SH EXCEPTIONS .IX Header "EXCEPTIONS" This middleware passes through unknown exceptions to the outside middleware stack, so if you use this middleware with other exception handlers such as Plack::Middleware::StackTrace or Plack::Middleware::HTTPExceptions, be sure to wrap this so Plack::Middleware::Recursive gets as inner as possible. .SH AUTHORS .IX Header "AUTHORS" Tatsuhiko Miyagawa .PP Masahiro Honma .SH "SEE ALSO" .IX Header "SEE ALSO" Plack Plack::Middleware::HTTPExceptions .PP The idea, code and interface are stolen from Rack::Recursive and paste.recursive.