function NavigationLinkBlock::getUriAsDisplayableString

Gets the URI without the 'internal:' or 'entity:' scheme.

The following two forms of URIs are transformed:

  • 'entity:' URIs: to entity autocomplete ("label (entity id)") strings;
  • 'internal:' URIs: the scheme is stripped.

This method is the inverse of ::getUserEnteredStringAsUri().

Parameters

string $uri: The URI to get the displayable string for.

Return value

string

See also

static::getUserEnteredStringAsUri()

1 call to NavigationLinkBlock::getUriAsDisplayableString()
NavigationLinkBlock::blockForm in core/modules/navigation/src/Plugin/Block/NavigationLinkBlock.php

File

core/modules/navigation/src/Plugin/Block/NavigationLinkBlock.php, line 195

Class

NavigationLinkBlock
Defines a link navigation block.

Namespace

Drupal\navigation\Plugin\Block

Code

protected static function getUriAsDisplayableString($uri) : string {
    $scheme = parse_url($uri, PHP_URL_SCHEME);
    // By default, the displayable string is the URI.
    $displayable_string = $uri;
    // A different displayable string may be chosen in case of the 'internal:'
    // or 'entity:' built-in schemes.
    if ($scheme === 'internal') {
        $uri_reference = explode(':', $uri, 2)[1];
        // @todo '<front>' is valid input for BC reasons, may be removed by
        //   https://www.drupal.org/node/2421941
        $path = parse_url($uri, PHP_URL_PATH);
        if ($path === '/') {
            $uri_reference = '<front>' . substr($uri_reference, 1);
        }
        $displayable_string = $uri_reference;
    }
    elseif ($scheme === 'entity') {
        [
            $entity_type,
            $entity_id,
        ] = explode('/', substr($uri, 7), 2);
        // Show the 'entity:' URI as the entity autocomplete would.
        // @todo Support entity types other than 'node'. Will be fixed in
        //   https://www.drupal.org/node/2423093.
        if ($entity_type == 'node' && ($entity = \Drupal::entityTypeManager()->getStorage($entity_type)
            ->load($entity_id))) {
            $displayable_string = EntityAutocomplete::getEntityLabels([
                $entity,
            ]);
        }
    }
    elseif ($scheme === 'route') {
        $displayable_string = ltrim($displayable_string, 'route:');
    }
    return $displayable_string;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.