Neos\Neos\Service\LinkingService::createSiteUri PHP Méthode

createSiteUri() public méthode

public createSiteUri ( ControllerContext $controllerContext, Site $site ) : string
$controllerContext Neos\Flow\Mvc\Controller\ControllerContext
$site Neos\Neos\Domain\Model\Site
Résultat string
    public function createSiteUri(ControllerContext $controllerContext, Site $site)
    {
        $primaryDomain = $site->getPrimaryDomain();
        if ($primaryDomain === null) {
            throw new NeosException(sprintf('Cannot link to a site "%s" since it has no active domains.', $site->getName()), 1460443524);
        }
        $requestUri = $controllerContext->getRequest()->getHttpRequest()->getUri();
        $baseUri = $controllerContext->getRequest()->getHttpRequest()->getBaseUri();
        $port = $primaryDomain->getPort() ?: $requestUri->getPort();
        return sprintf('%s://%s%s%s', $primaryDomain->getScheme() ?: $requestUri->getScheme(), $primaryDomain->getHostPattern(), $port && !in_array($port, [80, 443], true) ? ':' . $port : '', rtrim($baseUri->getPath(), '/'));
    }

Usage Example

 /**
  * Redirects to the Neos backend on the given site, passing a one-time login token
  *
  * @param Site $site
  * @return void
  */
 public function switchSiteAction($site)
 {
     $token = Algorithms::generateRandomToken(32);
     $this->loginTokenCache->set($token, $this->currentSession->getId());
     $siteUri = $this->linkingService->createSiteUri($this->controllerContext, $site);
     $loginUri = $this->controllerContext->getUriBuilder()->reset()->uriFor('tokenLogin', ['token' => $token], 'Login', 'Neos.Neos');
     $this->redirectToUri($siteUri . $loginUri);
 }