defaults = $defaults; } /** * Maps HTTP request to an array. */ public function match(Nette\Http\IRequest $httpRequest): ?array { return $httpRequest->getUrl()->getPathInfo() === '' ? $httpRequest->getQuery() + $this->defaults : null; } /** * Constructs absolute URL from array. */ public function constructUrl(array $params, Nette\Http\UrlScript $refUrl): ?string { // remove default values; null values are retain foreach ($this->defaults as $key => $value) { if (isset($params[$key]) && (is_scalar($params[$key]) ? (string) $params[$key] : $params[$key]) === (is_scalar($value) ? (string) $value : $value) ) { unset($params[$key]); } } $url = $refUrl->getHostUrl() . $refUrl->getPath(); $sep = ini_get('arg_separator.input'); $query = http_build_query($params, '', $sep ? $sep[0] : '&'); if ($query !== '') { $url .= '?' . $query; } return $url; } /** * Returns default values. */ public function getDefaults(): array { return $this->defaults; } }