Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. LinksetController.php

function LinksetController::processCustomLinkAttributes

Process custom link parameters.

Since the values for attributes are dynamic and we can't guarantee that they adhere to the linkset specification, we do some custom processing as follows, 1. Transform all of them into an array if they are not already an array. 2. Transform all non-string values into strings (e.g. ["42"] instead of [42]) 3. Ignore (for now) any keys that are already specified. Namely: hreflang, media, type, title, and title*. 4. Ensure that custom names do not contain an asterisk and ignore them if they do. 5. These attributes require special handling. For instance, these parameters must be strings instead of an array of strings.

NOTE: Values which are not object/array are cast to string.

Parameters

array $link: Link structure.

array $attributes: Attributes available for the link.

1 call to LinksetController::processCustomLinkAttributes()
LinksetController::toLinkTargetObjects in core/modules/system/src/Controller/LinksetController.php
Encode a menu tree as link items and capture any cacheability metadata.

File

core/modules/system/src/Controller/LinksetController.php, line 220

Class

LinksetController
Linkset controller.

Namespace

Drupal\system\Controller

Code

private function processCustomLinkAttributes(array &$link, array $attributes = []) {
    $attribute_keys_to_ignore = [
        'hreflang',
        'media',
        'type',
        'title',
        'title*',
    ];
    foreach ($attributes as $key => $value) {
        if (in_array($key, $attribute_keys_to_ignore, TRUE)) {
            continue;
        }
        // Skip the attribute key if it has an asterisk (*).
        if (str_contains($key, '*')) {
            continue;
        }
        // Skip the value if it is an object.
        if (is_object($value)) {
            continue;
        }
        // See https://datatracker.ietf.org/doc/html/draft-ietf-httpapi-linkset-03#section-4.2.4.3
        // Values for custom attributes must follow these rules,
        // - Values MUST be array.
        // - Each item in the array MUST be a string.
        if (is_array($value)) {
            $link[$key] = [];
            foreach ($value as $val) {
                if (is_object($val) || is_array($val)) {
                    continue;
                }
                $link[$key][] = (string) $val;
            }
        }
        else {
            $link[$key] = [
                (string) $value,
            ];
        }
    }
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal