data; } $key = \mb_strtolower($key); if (!isset($this->data[$key])) { return null; } if ($type === null) { return $this->data[$key] ?? null; } switch ($type) { case 'int': return (int) $this->data[$key]; case 'string': return (string) $this->data[$key]; case 'float': return (float) $this->data[$key]; case 'bool': return (bool) $this->data[$key]; default: return $this->data[$key]; } } /** * Get data. * * @param string $key Data key * * @return array * * @since 1.0.0 */ public function getDataJson(string $key) : array { $key = \mb_strtolower($key); if (!isset($this->data[$key])) { return []; } $json = \json_decode($this->data[$key], true); return $json === false ? [] : $json ?? []; } /** * Get data. * * @param string $key Data key * @param string $delim Data delimiter * * @return array * * @since 1.0.0 */ public function getDataList(string $key, string $delim = ',') : array { $key = \mb_strtolower($key); if (!isset($this->data[$key])) { return []; } $list = \explode($delim, $this->data[$key]); if ($list === false) { return []; // @codeCoverageIgnore } foreach ($list as $i => $e) { $list[$i] = \trim($e); } return $list; } /** * Get data based on wildcard. * * @param string $regex Regex data key * * @return array * * @since 1.0.0 */ public function getLike(string $regex) : array { $data = []; foreach ($this->data as $key => $value) { if (\preg_match('/' . $regex . '/', $key) === 1) { $data[$key] = $value; } } return $data; } /** * Check if has data. * * @param string $key Data key * * @return bool * * @since 1.0.0 */ public function hasData(string $key) : bool { return isset($this->data[$key]); } /** * Set request data. * * @param string $key Data key * @param mixed $value Value * @param bool $overwrite Overwrite data * * @return bool * * @since 1.0.0 */ public function setData(string $key, mixed $value, bool $overwrite = false) : bool { if (!$this->lock) { $key = \mb_strtolower($key); if ($overwrite || !isset($this->data[$key])) { $this->data[$key] = $value; return true; } } return false; } /** * Lock request for further manipulations. * * @return void * * @since 1.0.0 */ public function lock() : void { $this->lock = true; } /** * Get request language. * * @return string * * @since 1.0.0 */ public function getLanguage() : string { return $this->header->l11n->getLanguage(); } /** * Get request hash. * * @return string[] * * @since 1.0.0 */ public function getHash() : array { return $this->hash; } /** * Get the origin request source (IPv4/IPv6) * * @return string */ abstract public function getOrigin() : string; /** * {@inheritdoc} */ public function __toString() : string { return $this->uri->__toString(); } /** * Get files. * * @return array * * @since 1.0.0 */ public function getFiles() : array { return $this->files; } }