Finalize body. Prints the response output as blocking stream if it looks like
a filehandle, otherwise write it out all in one go. If there is no body in
the response, we assume you are handling it 'manually', such as for nonblocking
-style or asynchronous streaming responses. You do this by calling L<\write>
-several times (which sends HTTP headers if needed) or you close over C<$response->write_fh>.
+style or asynchronous streaming responses. You do this by calling L</write>
+several times (which sends HTTP headers if needed) or you close over
+C<< $response->write_fh >>.
-See L<Catalyst::Response\write> and L<Catalyst::Response\write_fh> for more.
+See L<Catalyst::Response/write> and L<Catalyst::Response/write_fh> for more.
=cut
sub finalize_body {
my ( $self, $c ) = @_;
- return if $c->response->has_write_fh;
+ return if $c->response->_has_write_fh;
my $body = $c->response->body;
no warnings 'uninitialized';
my $env = $c->request->env;
if(my $query_obj = $env->{'plack.request.query'}) {
- $c->request->query_parameters($query_obj->as_hashref_mixed);
+ $c->request->query_parameters(
+ $c->request->_use_hash_multivalue ?
+ $query_obj->clone :
+ $query_obj->as_hashref_mixed);
return;
}
# (yes, index() is faster than a regex :))
if ( index( $query_string, '=' ) < 0 ) {
$c->request->query_keywords($self->unescape_uri($query_string));
- $env->{'plack.request.query'} ||= Hash::MultiValue->new(
- map { (URI::Escape::uri_unescape($_), '') }
- split(/\+/, $query_string, -1));
-
return;
}
}
}
- $env->{'plack.request.query'} ||= Hash::MultiValue->from_mixed(\%query);
- $c->request->query_parameters( \%query );
+ $c->request->query_parameters(
+ $c->request->_use_hash_multivalue ?
+ Hash::MultiValue->from_mixed(\%query) :
+ \%query);
}
=head2 $self->prepare_read($c)
my $uploads = $request->_body->upload;
my $parameters = $request->parameters;
- my @plack_uploads;
foreach my $name (keys %$uploads) {
my $files = $uploads->{$name};
my @uploads;
filename => $upload->{filename},
);
push @uploads, $u;
-
- # Plack compatibility.
- my %copy = (%$upload, headers=>$headers);
- push @plack_uploads, $name, Plack::Request::Upload->new(%copy);
}
$request->uploads->{$name} = @uploads > 1 ? \@uploads : $uploads[0];
-
# support access to the filename as a normal param
my @filenames = map { $_->{filename} } @uploads;
# append, if there's already params with this name
$parameters->{$name} = @filenames > 1 ? \@filenames : $filenames[0];
}
}
-
- $self->env->{'plack.request.upload'} ||= Hash::MultiValue->new(@plack_uploads);
}
=head2 $self->write($c, $buffer)