sub prepare_query_parameters {
my ($self, $c) = @_;
-
my $env = $c->request->env;
+
+ if(my $query_obj = $env->{'plack.request.query'}) {
+ $c->request->query_parameters($query_obj->as_hashref_mixed);
+ return;
+ }
+
my $query_string = exists $env->{QUERY_STRING}
? $env->{QUERY_STRING}
: '';
# Check for keywords (no = signs)
# (yes, index() is faster than a regex :))
if ( index( $query_string, '=' ) < 0 ) {
- $c->request->query_keywords( $self->unescape_uri($query_string) );
+ $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;
}
$query{$param} = $value;
}
}
+
+ $env->{'plack.request.query'} ||= Hash::MultiValue->from_mixed(\%query);
$c->request->query_parameters( \%query );
}
my $parameters = {};
my $body_parameters = $self->body_parameters;
my $query_parameters = $self->query_parameters;
+
+ ## setup for downstream plack
+ $self->env->{'plack.request.merged'} ||= do {
+ my $query = $self->env->{'plack.request.query'} || Hash::MultiValue->new;
+ my $body = $self->env->{'plack.request.body'} || Hash::MultiValue->new;
+ Hash::MultiValue->new($query->flatten, $body->flatten);
+ };
+
# We copy, no references
foreach my $name (keys %$query_parameters) {
my $param = $query_parameters->{$name};