123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- <?php
- /**
- * @package Grav\Framework\Uri
- *
- * @copyright Copyright (C) 2015 - 2019 Trilby Media, LLC. All rights reserved.
- * @license MIT License; see LICENSE file for details.
- */
- namespace Grav\Framework\Uri;
- use Grav\Framework\Psr7\AbstractUri;
- use GuzzleHttp\Psr7\Uri as GuzzleUri;
- use Psr\Http\Message\UriInterface;
- /**
- * Implements PSR-7 UriInterface.
- *
- * @package Grav\Framework\Uri
- */
- class Uri extends AbstractUri
- {
- /** @var array Array of Uri query. */
- private $queryParams;
- /**
- * You can use `UriFactory` functions to create new `Uri` objects.
- *
- * @param array $parts
- * @throws \InvalidArgumentException
- */
- public function __construct(array $parts = [])
- {
- $this->initParts($parts);
- }
- /**
- * @return string
- */
- public function getUser()
- {
- return parent::getUser();
- }
- /**
- * @return string
- */
- public function getPassword()
- {
- return parent::getPassword();
- }
- /**
- * @return array
- */
- public function getParts()
- {
- return parent::getParts();
- }
- /**
- * @return string
- */
- public function getUrl()
- {
- return parent::getUrl();
- }
- /**
- * @return string
- */
- public function getBaseUrl()
- {
- return parent::getBaseUrl();
- }
- /**
- * @param string $key
- * @return string|null
- */
- public function getQueryParam($key)
- {
- $queryParams = $this->getQueryParams();
- return $queryParams[$key] ?? null;
- }
- /**
- * @param string $key
- * @return UriInterface
- */
- public function withoutQueryParam($key)
- {
- return GuzzleUri::withoutQueryValue($this, $key);
- }
- /**
- * @param string $key
- * @param string|null $value
- * @return UriInterface
- */
- public function withQueryParam($key, $value)
- {
- return GuzzleUri::withQueryValue($this, $key, $value);
- }
- /**
- * @return array
- */
- public function getQueryParams()
- {
- if ($this->queryParams === null) {
- $this->queryParams = UriFactory::parseQuery($this->getQuery());
- }
- return $this->queryParams;
- }
- /**
- * @param array $params
- * @return UriInterface
- */
- public function withQueryParams(array $params)
- {
- $query = UriFactory::buildQuery($params);
- return $this->withQuery($query);
- }
- /**
- * Whether the URI has the default port of the current scheme.
- *
- * `$uri->getPort()` may return the standard port. This method can be used for some non-http/https Uri.
- *
- * @return bool
- */
- public function isDefaultPort()
- {
- return $this->getPort() === null || GuzzleUri::isDefaultPort($this);
- }
- /**
- * Whether the URI is absolute, i.e. it has a scheme.
- *
- * An instance of UriInterface can either be an absolute URI or a relative reference. This method returns true
- * if it is the former. An absolute URI has a scheme. A relative reference is used to express a URI relative
- * to another URI, the base URI. Relative references can be divided into several forms:
- * - network-path references, e.g. '//example.com/path'
- * - absolute-path references, e.g. '/path'
- * - relative-path references, e.g. 'subpath'
- *
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-4
- */
- public function isAbsolute()
- {
- return GuzzleUri::isAbsolute($this);
- }
- /**
- * Whether the URI is a network-path reference.
- *
- * A relative reference that begins with two slash characters is termed an network-path reference.
- *
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-4.2
- */
- public function isNetworkPathReference()
- {
- return GuzzleUri::isNetworkPathReference($this);
- }
- /**
- * Whether the URI is a absolute-path reference.
- *
- * A relative reference that begins with a single slash character is termed an absolute-path reference.
- *
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-4.2
- */
- public function isAbsolutePathReference()
- {
- return GuzzleUri::isAbsolutePathReference($this);
- }
- /**
- * Whether the URI is a relative-path reference.
- *
- * A relative reference that does not begin with a slash character is termed a relative-path reference.
- *
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-4.2
- */
- public function isRelativePathReference()
- {
- return GuzzleUri::isRelativePathReference($this);
- }
- /**
- * Whether the URI is a same-document reference.
- *
- * A same-document reference refers to a URI that is, aside from its fragment
- * component, identical to the base URI. When no base URI is given, only an empty
- * URI reference (apart from its fragment) is considered a same-document reference.
- *
- * @param UriInterface|null $base An optional base URI to compare against
- * @return bool
- * @link https://tools.ietf.org/html/rfc3986#section-4.4
- */
- public function isSameDocumentReference(UriInterface $base = null)
- {
- return GuzzleUri::isSameDocumentReference($this, $base);
- }
- }
|