Upgrading from 5.x to 6.x
League\Uri 6.0 is a new major version that comes with backward compatibility breaks.
This guide will help you migrate from a 4.x version to 5.0. It will only explain backward compatibility breaks, it will not present the new features (read the documentation for that).
Installation
If you are using composer then you should update the require section of your composer.json file.
composer require league/uri:^6.0
This will edit (or create) your composer.json file.
PHP version requirement
League\Uri 6.0 requires a PHP version greater or equal than 7.2.0 (was previously 7.0.0).
Package replacements and conflicts
This package is no longer a meta-package as such:
- it replaces, deprecates and conflicts with the
uri-schemespackage. - it replaces and deprecates without conflicting the
uri-parserpackage. - it partially replaces and deprecates without conflicting the
uri-manipulationpackage.
You are required to be explicit about your dependencies and
require the uri-components v2.0 package separately to get access to
URI components objects and how to manipulate them with URI objects.
Interfaces
The League\Uri\Http class no longer implements the League\Uri specific interface. It only implements the PSR-7 UriInterface and PHP’s JsonSerializable interfaces.
All implementations are final
Prior to this version, you could extends the URI objects or use an AbstractUri object to create your own URI object. In this new version all classes are finals and you should use the decorator pattern or implement your own objects if you want to support other specific schemes.
URI Schemes support
The League\Uri\Http is no longer restricted to http(s) schemes it can be used for any schemes but differ to http(s) scheme validation if the URI has no scheme or if this scheme is special.
Before:
<?php
use League\Uri\Http;
$uri = Http::createFromString('ftp://uri.thephpleague.com/upgrading/');
//triggers an exception
After:
<?php
use League\Uri\Http;
$uri = Http::createFromString('ftp://uri.thephpleague.com/upgrading/');
echo $uri; //displays 'ftp://uri.thephpleague.com/upgrading/'
All URI objects classes have been removed from the package except for the League\Uri\Uri and League\Uri\Http classes.
Before:
<?php
use League\Uri\Ftp;
$uri = Ftp::createFromString('ftp://uri.thephpleague.com/upgrading/');
After:
<?php
use League\Uri\Uri;
use League\Uri\Http;
$uri = Uri::createFromString('ftp://uri.thephpleague.com/upgrading/');
//or
$uri = Http::createFromString('ftp://uri.thephpleague.com/upgrading/');
The choice of class usage will depends on your business rules.
Parameter acceptance
Prior to this release to undefined a component content you needed to set it with the empty string '' starting with this version when using the League\Uri\Uri object, undefined component are defined with the null value except for the path component which can never be null.
Before:
<?php
use League\Uri\Uri;
$uri = Uri::createFromString('ftp://uri.thephpleague.com/upgrading/');
$newUri = $uri->withScheme('');
echo $newUri; //displays '//uri.thephpleague.com/upgrading/'
After:
<?php
use League\Uri\Uri;
$uri = Uri::createFromString('ftp://uri.thephpleague.com/upgrading/');
$newUri = $uri->withScheme(null);
echo $newUri; //displays '//uri.thephpleague.com/upgrading/'
<?php
use League\Uri\Uri;
$uri = Uri::createFromString('ftp://uri.thephpleague.com/upgrading/');
$uri->withScheme(''); // will trigger an League\Uri\Exceptions\SyntaxError exception