uri; } /** * Set request uri. * * @param UriInterface $uri Uri * * @return void * * @since 1.0.0 */ public function setUri(UriInterface $uri) : void { $this->uri = $uri; } /** * Get request hash. * * @return array * * @since 1.0.0 */ public function getHash() : array { return $this->hash; } /** * Get request method. * * @return string * * @since 1.0.0 */ abstract public function getMethod() : string; /** * Set request method. * * @param string $method Request method * * @return void * * @since 1.0.0 */ public function setMethod(string $method) : void { $this->method = $method; } /** * Get data. * * @param mixed $key Data key * * @return mixed * * @since 1.0.0 */ public function getData($key = null) { if ($key === null) { return $this->data; } $key = mb_strtolower($key); return $this->data[$key] ?? null; } /** * Check if has data. * * @param mixed $key Data key * * @return bool * * @since 1.0.0 */ public function hasData($key) : bool { return isset($this->data[$key]); } /** * Set request data. * * @param mixed $key Data key * @param mixed $value Value * @param bool $overwrite Overwrite data * * @return bool * * @since 1.0.0 */ public function setData($key, $value, bool $overwrite = true) : 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 header. * * @return HeaderAbstract * * @since 1.0.0 */ public function getHeader() : HeaderAbstract { return $this->header; } /** * {@inheritdoc} */ abstract public function getOrigin() : string; /** * {@inheritdoc} */ public function __toString() : string { return $this->uri->__toString(); } /** * Get route verb. * * @return int * * @since 1.0.0 */ abstract public function getRouteVerb() : int; }