Http, Https URI
Instantiation
To work with Http URIs you can use the League\Uri\Http
class. This class handles secure and insecure Http URI. In addition to the default named constructors, the Http
class can be instantiated using the server variables.
<?php
use League\Uri;
//don't forget to provide the $_SERVER array
$uri = Uri\Http::createFromServer($_SERVER);
Validation
The scheme of a HTTP(s) URI must be equal to http
, https
or be equal to null
.
Authority presence
If a scheme is present and the scheme specific part of a Http URI is not empty the URI can not contain an empty authority. Thus, some Http URI modifications must be applied in a specific order to preserve the URI validation.
<?php
use League\Uri;
$uri = Uri\Http::createFromString('http://uri.thephpleague.com/');
echo $uri->withHost('')->withScheme('');
// will throw an League\Uri\UriException
// you can not remove the Host if a scheme is present
Instead you are required to proceed as below
<?php
use League\Uri;
$uri = Uri\Http::createFromString('http://uri.thephpleague.com/');
echo $uri->withScheme('')->withHost(''); //displays "/"
Path validity
According to RFC3986, if an HTTP URI contains a non empty authority part, the URI path must be the empty string or absolute. Thus, some modification may trigger an UriException
.
<?php
use League\Uri;
$uri = Uri\Http::createFromString('http://uri.thephpleague.com/');
echo $uri->withPath('uri/schemes/http');
// will throw an League\Uri\UriException
Instead you are required to submit a absolute path
<?php
use League\Uri;
$uri = Uri\Http::createFromString('http://uri.thephpleague.com/');
echo $uri->withPath('/uri/schemes/http'); // displays 'http://uri.thephpleague.com/uri/schemes/http'
Of note this does not mean that rootless path are forbidden, the following code is fine.
<?php
use League\Uri;
$uri = Uri\Http::createFromString('?foo=bar');
echo $uri->withPath('uri/schemes/http'); // displays 'uri/schemes/http?foo=bar'
Relation with PSR-7
The Http
class implements the PSR-7 UriInterface
interface. This means that you can use this class anytime you need a PSR-7 compliant URI object.