Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
12 / 12 |
UrlBuilder | |
100.00% |
1 / 1 |
|
100.00% |
2 / 2 |
7 | |
100.00% |
12 / 12 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
buildUrl | |
100.00% |
1 / 1 |
6 | |
100.00% |
10 / 10 |
<?php | |
/* | |
* This file is part of the Incipio package. | |
* | |
* (c) Théo FIDRY <theo.fidry@gmail.com> | |
* | |
* For the full copyright and license information, please view the LICENSE | |
* file that was distributed with this source code. | |
*/ | |
namespace FrontBundle\Services\Http; | |
use Symfony\Component\Routing\Exception\InvalidParameterException; | |
use Symfony\Component\Routing\Exception\MissingMandatoryParametersException; | |
use Symfony\Component\Routing\Exception\RouteNotFoundException; | |
use Symfony\Component\Routing\RouterInterface; | |
/** | |
* @author Théo FIDRY <theo.fidry@gmail.com> | |
*/ | |
class UrlBuilder | |
{ | |
/** | |
* @var RouterInterface | |
*/ | |
private $router; | |
public function __construct(RouterInterface $router) | |
{ | |
$this->router = $router; | |
} | |
/** | |
* Expands a URI template and inherit from the base URL if it's relative. | |
* | |
* @param string $baseUrl Base URL to which will be applied the URI. | |
* @param string|null $url URL or an array of the URI template to expand followed by a hash of template | |
* varnames. | |
* @param array $parameters Route name parameters. If $url parameter passed is not a route name, this | |
* parameter is ignored. | |
* | |
* @return string URL | |
* | |
* @throws RouteNotFoundException If the named route doesn't exist | |
* @throws MissingMandatoryParametersException When some parameters are missing that are mandatory for the route | |
* @throws InvalidParameterException When a parameter value for a placeholder is not correct because it | |
* does not match the requirement | |
*/ | |
public function buildUrl($baseUrl, $url = null, array $parameters = []) | |
{ | |
if (null === $url || '' === $url) { | |
return $baseUrl; | |
} | |
// Is absolute URL, left unchanged | |
if (false !== strpos($url, '://')) { | |
return $url; | |
} | |
// Is URI | |
if (false !== strpos($url, '/')) { | |
if ('/' === $baseUrl[strlen($baseUrl) - 1]) { | |
$baseUrl = substr($baseUrl, 0, strlen($baseUrl) - 1); | |
} | |
return sprintf('%s%s', $baseUrl, $url); | |
} | |
// Is a route name | |
return $this->buildUrl($baseUrl, $this->router->generate($url, $parameters)); | |
} | |
} |