eZ\Publish\Core\MVC\Symfony\Routing\Generator::generate PHP Метод

generate() публичный Метод

Triggers URL generation for $urlResource and $parameters.
public generate ( mixed $urlResource, array $parameters, integer $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH ) : string
$urlResource mixed Type can be anything, depending on the context. It's up to the router to pass the appropriate value to the implementor.
$parameters array Arbitrary hash of parameters to generate a link. SiteAccess name can be provided as 'siteaccess' to generate a link to it (cross siteaccess link).
$referenceType integer The type of reference to be generated (one of the constants)
Результат string
    public function generate($urlResource, array $parameters, $referenceType = UrlGeneratorInterface::ABSOLUTE_PATH)
    {
        $siteAccess = $this->siteAccess;
        $requestContext = $this->requestContext;
        // Retrieving the appropriate SiteAccess to generate the link for.
        if (isset($parameters['siteaccess'])) {
            $siteAccess = $this->siteAccessRouter->matchByName($parameters['siteaccess']);
            if ($siteAccess instanceof SiteAccess && $siteAccess->matcher instanceof SiteAccess\VersatileMatcher) {
                $requestContext = $this->getContextBySimplifiedRequest($siteAccess->matcher->getRequest());
            } 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 = $this->doGenerate($urlResource, $parameters);
        // Add the SiteAccess URI back if needed.
        if ($siteAccess && $siteAccess->matcher instanceof SiteAccess\URILexer) {
            $url = $siteAccess->matcher->analyseLink($url);
        }
        $url = $requestContext->getBaseUrl() . $url;
        if ($referenceType === UrlGeneratorInterface::ABSOLUTE_URL) {
            $url = $this->generateAbsoluteUrl($url, $requestContext);
        }
        return $url;
    }

Usage Example

Пример #1
0
 /**
  * @dataProvider generateProvider
  */
 public function testGenerateWithSiteAccessNoReverseMatch($urlResource, array $parameters, $referenceType)
 {
     $matcher = $this->getMock('eZ\\Publish\\Core\\MVC\\Symfony\\SiteAccess\\URILexer');
     $this->generator->setSiteAccess(new SiteAccess('test', 'test', $matcher));
     $baseUrl = '/base/url';
     $requestContext = new RequestContext($baseUrl);
     $this->generator->setRequestContext($requestContext);
     $uri = '/some/thing';
     $this->generator->expects($this->once())->method('doGenerate')->with($urlResource, $parameters)->will($this->returnValue($uri));
     $fullUri = $baseUrl . $uri;
     $matcher->expects($this->once())->method('analyseLink')->with($uri)->will($this->returnValue($uri));
     if ($referenceType === UrlGeneratorInterface::ABSOLUTE_URL) {
         $fullUri = $requestContext->getScheme() . '://' . $requestContext->getHost() . $baseUrl . $uri;
     }
     $siteAccessName = 'fake';
     $this->siteAccessRouter->expects($this->once())->method('matchByName')->with($siteAccessName)->will($this->returnValue(null));
     $this->logger->expects($this->once())->method('notice');
     $this->assertSame($fullUri, $this->generator->generate($urlResource, $parameters + array('siteaccess' => $siteAccessName), $referenceType));
 }