Neos\Neos\Domain\Service\DomainMatchingStrategy::getSortedMatches PHP Method

getSortedMatches() public method

The domains are sorted by their match exactness. If none really matches an empty array is returned.
public getSortedMatches ( string $hostnameToMatch, array $domains ) : array
$hostnameToMatch string The hostname to match against (eg. "localhost" or "www.neos.io")
$domains array
return array The matching domains
    public function getSortedMatches($hostnameToMatch, array $domains)
    {
        $matchingDomains = array();
        $matchQualities = array();
        $hostnameToMatchPartsReverse = array_reverse(explode('.', $hostnameToMatch));
        foreach ($domains as $domain) {
            $domainHostname = $domain->getHostname();
            if ($hostnameToMatch === $domainHostname) {
                $matchQuality = self::EXACTMATCH;
            } else {
                $matchQuality = 0;
                $domainHostnamePartsReverse = array_reverse(explode('.', $domainHostname));
                foreach ($domainHostnamePartsReverse as $index => $domainHostnamePart) {
                    if (isset($hostnameToMatchPartsReverse[$index]) && $domainHostnamePart === $hostnameToMatchPartsReverse[$index]) {
                        $matchQuality++;
                    } else {
                        $matchQuality = self::NOMATCH;
                        break;
                    }
                }
            }
            if ($matchQuality > 0) {
                $matchingDomains[] = $domain;
                $matchQualities[] = $matchQuality;
            }
        }
        array_multisort($matchQualities, SORT_DESC, $matchingDomains);
        return $matchingDomains;
    }

Usage Example

 /**
  * @test
  */
 public function getSortedMatchesReturnsNoMatchIfDomainIsLongerThanHostname()
 {
     $mockDomains = array($this->getMockBuilder(Domain::class)->disableOriginalConstructor()->setMethods(array('dummy'))->getMock());
     $mockDomains[0]->setHostname('flow.neos.io');
     $expectedDomains = array();
     $strategy = new DomainMatchingStrategy();
     $actualDomains = $strategy->getSortedMatches('neos.io', $mockDomains);
     $this->assertSame($expectedDomains, $actualDomains);
 }
All Usage Examples Of Neos\Neos\Domain\Service\DomainMatchingStrategy::getSortedMatches
DomainMatchingStrategy