+ $this->response->addContent((new ModuleHTTPException())->content($e));
+ } finally {
+ $this->profiler->set(microtime(true) - $timestamp, 'content');
+ }
+
+ return $this->response->generate();
+ }
+
+ /**
+ * Checks request inputs and sets default parameters
+ *
+ * @param array $defaults Associative array of expected request keys and their default typed value. A null
+ * value will remove the request key from the resulting value array.
+ * @param array $input Custom REQUEST array, superglobal instead
+ *
+ * @return array Request data
+ */
+ protected function checkDefaults(array $defaults, array $input): array
+ {
+ $request = [];
+
+ foreach ($defaults as $parameter => $defaultvalue) {
+ if (is_string($defaultvalue)) {
+ $request[$parameter] = $input[$parameter] ?? $defaultvalue;
+ } elseif (is_int($defaultvalue)) {
+ $request[$parameter] = (int)($input[$parameter] ?? $defaultvalue);
+ } elseif (is_float($defaultvalue)) {
+ $request[$parameter] = (float)($input[$parameter] ?? $defaultvalue);
+ } elseif (is_array($defaultvalue)) {
+ $request[$parameter] = $input[$parameter] ?? [];
+ } elseif (is_bool($defaultvalue)) {
+ $request[$parameter] = in_array(strtolower($input[$parameter] ?? ''), ['true', '1']);
+ } else {
+ $this->logger->notice('Unhandled default value type', ['parameter' => $parameter, 'type' => gettype($defaultvalue)]);
+ }