eZ\Bundle\EzPublishCoreBundle\Routing\DefaultRouter::generate PHP Method

generate() public method

public generate ( $name, $parameters = [], $referenceType = self::ABSOLUTE_PATH )
    public function generate($name, $parameters = array(), $referenceType = self::ABSOLUTE_PATH)
    {
        $siteAccess = $this->siteAccess;
        $originalContext = $context = $this->getContext();
        $isSiteAccessAware = $this->isSiteAccessAwareRoute($name);
        // Retrieving the appropriate SiteAccess to generate the link for.
        if (isset($parameters['siteaccess']) && $isSiteAccessAware) {
            $siteAccess = $this->siteAccessRouter->matchByName($parameters['siteaccess']);
            if ($siteAccess instanceof SiteAccess && $siteAccess->matcher instanceof SiteAccess\VersatileMatcher) {
                // Switch request context for link generation.
                $context = $this->getContextBySimplifiedRequest($siteAccess->matcher->getRequest());
                $this->setContext($context);
            } elseif ($this->logger) {
                $siteAccess = $this->siteAccess;
                $this->logger->notice("Could not generate a link using provided 'siteaccess' parameter: {$parameters['siteaccess']}. Generating using current context.");
            }
            unset($parameters['siteaccess']);
        }
        $url = parent::generate($name, $parameters, $referenceType);
        // Now putting back SiteAccess URI if needed.
        if ($isSiteAccessAware && $siteAccess && $siteAccess->matcher instanceof URILexer) {
            if ($referenceType === self::ABSOLUTE_URL || $referenceType === self::NETWORK_PATH) {
                $scheme = $context->getScheme();
                $port = '';
                if ($scheme === 'http' && $this->context->getHttpPort() != 80) {
                    $port = ':' . $this->context->getHttpPort();
                } elseif ($scheme === 'https' && $this->context->getHttpsPort() != 443) {
                    $port = ':' . $this->context->getHttpsPort();
                }
                $base = $context->getHost() . $port . $context->getBaseUrl();
            } else {
                $base = $context->getBaseUrl();
            }
            $linkUri = $base ? substr($url, strpos($url, $base) + strlen($base)) : $url;
            $url = str_replace($linkUri, $siteAccess->matcher->analyseLink($linkUri), $url);
        }
        // Switch back to original context, for next links generation.
        $this->setContext($originalContext);
        return $url;
    }