Neos.ContentRepository/Classes/Domain/Service/ContextFactory.php
protected function getIdentifierSource(array $contextProperties)
    {
        ksort($contextProperties);
        $identifierSource = $this->contextImplementation;
        foreach ($contextProperties as $propertyName => $propertyValue) {
            if ($propertyName === 'dimensions') {
                $stringParts = [];
                foreach ($propertyValue as $dimensionName => $dimensionValues) {
                    $stringParts[] = $dimensionName . '=' . implode(',', $dimensionValues);
                }
                $stringValue = implode('&', $stringParts);
            } elseif ($propertyName === 'targetDimensions') {
                $stringParts = [];
                foreach ($propertyValue as $dimensionName => $dimensionValue) {
                    $stringParts[] = $dimensionName . '=' . $dimensionValue;
                }
                $stringValue = implode('&', $stringParts);
            } else {
                $stringValue = $propertyValue instanceof \DateTimeInterface ? $propertyValue->getTimestamp() : (string)$propertyValue;
            }
            $identifierSource .= ':' . $stringValue;
        }

        return $identifierSource;
    }
protected function getIdentifierSource(array $contextProperties)
    {
        ksort($contextProperties);
        $identifierSource = $this->contextImplementation;
        foreach ($contextProperties as $propertyName => $propertyValue) {
            if ($propertyName === 'dimensions') {
                $stringParts = [];
                foreach ($propertyValue as $dimensionName => $dimensionValues) {
                    $stringParts[] = $dimensionName . '=' . implode(',', $dimensionValues);
                }
                $stringValue = implode('&', $stringParts);
            } elseif ($propertyName === 'targetDimensions') {
                $stringParts = [];
                foreach ($propertyValue as $dimensionName => $dimensionValue) {
                    $stringParts[] = $dimensionName . '=' . $dimensionValue;
                }
                $stringValue = implode('&', $stringParts);
            } else {
                $stringValue = $propertyValue instanceof \DateTimeInterface ? $propertyValue->getTimestamp() : (string)$propertyValue;
            }
            $identifierSource .= ':' . $stringValue;
        }

        return $identifierSource;
    }
protected function getIdentifierSource ( array $ contextProperties ) { ksort ( $ contextProperties ) ; $ identifierSource = $ this -> contextImplementation ; foreach ( $ contextProperties as $ propertyName => $ propertyValue ) { if ( $ propertyName === 'dimensions' ) { $ stringParts = [ ] ; foreach ( $ propertyValue as $ dimensionName => $ dimensionValues ) { $ stringParts [ ] = $ dimensionName . '=' . implode ( ',' , $ dimensionValues ) ; } $ stringValue = implode ( '&' , $ stringParts ) ; } elseif ( $ propertyName === 'targetDimensions' ) { $ stringParts = [ ] ; foreach ( $ propertyValue as $ dimensionName => $ dimensionValue ) { $ stringParts [ ] = $ dimensionName . '=' . $ dimensionValue ; } $ stringValue = implode ( '&' , $ stringParts ) ; } else { $ stringValue = $ propertyValue instanceof \ DateTimeInterface ? $ propertyValue -> getTimestamp ( ) : ( string ) $ propertyValue ; } $ identifierSource .= ':' . $ stringValue ; } return $ identifierSource ; }
This creates the actual identifier and needs to be overridden by builders extending this.

@param array $contextProperties
@return string
This creates the actual identifier and needs to be overridden by builders extending this .