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)); | |
| } | |
| } |