*/
class UrlGenerator implements UrlGeneratorInterface, ConfigurableRequirementsInterface
{
- /**
- * @var RouteCollection
- */
protected $routes;
-
- /**
- * @var RequestContext
- */
protected $context;
/**
*/
protected $strictRequirements = true;
- /**
- * @var LoggerInterface|null
- */
protected $logger;
/**
'%7C' => '|',
);
- /**
- * Constructor.
- *
- * @param RouteCollection $routes A RouteCollection instance
- * @param RequestContext $context The context
- * @param LoggerInterface|null $logger A logger instance
- */
public function __construct(RouteCollection $routes, RequestContext $context, LoggerInterface $logger = null)
{
$this->routes = $routes;
}
$schemeAuthority = '';
- if ($host = $this->context->getHost()) {
- $scheme = $this->context->getScheme();
+ $host = $this->context->getHost();
+ $scheme = $this->context->getScheme();
- if ($requiredSchemes) {
- if (!in_array($scheme, $requiredSchemes, true)) {
- $referenceType = self::ABSOLUTE_URL;
- $scheme = current($requiredSchemes);
- }
+ if ($requiredSchemes) {
+ if (!in_array($scheme, $requiredSchemes, true)) {
+ $referenceType = self::ABSOLUTE_URL;
+ $scheme = current($requiredSchemes);
}
+ }
- if ($hostTokens) {
- $routeHost = '';
- foreach ($hostTokens as $token) {
- if ('variable' === $token[0]) {
- if (null !== $this->strictRequirements && !preg_match('#^'.$token[2].'$#i'.(empty($token[4]) ? '' : 'u'), $mergedParams[$token[3]])) {
- if ($this->strictRequirements) {
- throw new InvalidParameterException(strtr($message, array('{parameter}' => $token[3], '{route}' => $name, '{expected}' => $token[2], '{given}' => $mergedParams[$token[3]])));
- }
-
- if ($this->logger) {
- $this->logger->error($message, array('parameter' => $token[3], 'route' => $name, 'expected' => $token[2], 'given' => $mergedParams[$token[3]]));
- }
+ if ($hostTokens) {
+ $routeHost = '';
+ foreach ($hostTokens as $token) {
+ if ('variable' === $token[0]) {
+ if (null !== $this->strictRequirements && !preg_match('#^'.$token[2].'$#i'.(empty($token[4]) ? '' : 'u'), $mergedParams[$token[3]])) {
+ if ($this->strictRequirements) {
+ throw new InvalidParameterException(strtr($message, array('{parameter}' => $token[3], '{route}' => $name, '{expected}' => $token[2], '{given}' => $mergedParams[$token[3]])));
+ }
- return;
+ if ($this->logger) {
+ $this->logger->error($message, array('parameter' => $token[3], 'route' => $name, 'expected' => $token[2], 'given' => $mergedParams[$token[3]]));
}
- $routeHost = $token[1].$mergedParams[$token[3]].$routeHost;
- } else {
- $routeHost = $token[1].$routeHost;
+ return;
}
- }
- if ($routeHost !== $host) {
- $host = $routeHost;
- if (self::ABSOLUTE_URL !== $referenceType) {
- $referenceType = self::NETWORK_PATH;
- }
+ $routeHost = $token[1].$mergedParams[$token[3]].$routeHost;
+ } else {
+ $routeHost = $token[1].$routeHost;
}
}
- if (self::ABSOLUTE_URL === $referenceType || self::NETWORK_PATH === $referenceType) {
- $port = '';
- if ('http' === $scheme && 80 != $this->context->getHttpPort()) {
- $port = ':'.$this->context->getHttpPort();
- } elseif ('https' === $scheme && 443 != $this->context->getHttpsPort()) {
- $port = ':'.$this->context->getHttpsPort();
+ if ($routeHost !== $host) {
+ $host = $routeHost;
+ if (self::ABSOLUTE_URL !== $referenceType) {
+ $referenceType = self::NETWORK_PATH;
}
+ }
+ }
- $schemeAuthority = self::NETWORK_PATH === $referenceType ? '//' : "$scheme://";
- $schemeAuthority .= $host.$port;
+ if ((self::ABSOLUTE_URL === $referenceType || self::NETWORK_PATH === $referenceType) && !empty($host)) {
+ $port = '';
+ if ('http' === $scheme && 80 != $this->context->getHttpPort()) {
+ $port = ':'.$this->context->getHttpPort();
+ } elseif ('https' === $scheme && 443 != $this->context->getHttpsPort()) {
+ $port = ':'.$this->context->getHttpsPort();
}
+
+ $schemeAuthority = self::NETWORK_PATH === $referenceType ? '//' : "$scheme://";
+ $schemeAuthority .= $host.$port;
}
if (self::RELATIVE_PATH === $referenceType) {