You are here

class AttributeHelper in Drupal 10

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Template/AttributeHelper.php \Drupal\Core\Template\AttributeHelper
  2. 9 core/lib/Drupal/Core/Template/AttributeHelper.php \Drupal\Core\Template\AttributeHelper

Helper class to deal with mixed array and Attribute operations.

This class contains static methods only and is not meant to be instantiated.

Hierarchy

Expanded class hierarchy of AttributeHelper

2 files declare their use of AttributeHelper
AttributeHelperTest.php in core/tests/Drupal/Tests/Core/Template/AttributeHelperTest.php
theme.inc in core/includes/theme.inc
The theme system, which controls the output of Drupal.

File

core/lib/Drupal/Core/Template/AttributeHelper.php, line 12

Namespace

Drupal\Core\Template
View source
class AttributeHelper {

  /**
   * This class should not be instantiated.
   */
  private function __construct() {
  }

  /**
   * Checks if the given attribute collection has an attribute.
   *
   * @param string $name
   *   The name of the attribute to check for.
   * @param \Drupal\Core\Template\Attribute|array $collection
   *   An Attribute object or an array of attributes.
   *
   * @return bool
   *   TRUE if the attribute exists, FALSE otherwise.
   *
   * @throws \InvalidArgumentException
   *   When the input $collection is neither an Attribute object nor an array.
   */
  public static function attributeExists($name, $collection) {
    if ($collection instanceof Attribute) {
      return $collection
        ->hasAttribute($name);
    }
    elseif (is_array($collection)) {
      return array_key_exists($name, $collection);
    }
    throw new \InvalidArgumentException('Invalid collection argument');
  }

  /**
   * Merges two attribute collections.
   *
   * @param \Drupal\Core\Template\Attribute|array $a
   *   First Attribute object or array to merge. The returned value type will
   *   be the same as the type of this argument.
   * @param \Drupal\Core\Template\Attribute|array $b
   *   Second Attribute object or array to merge.
   *
   * @return \Drupal\Core\Template\Attribute|array
   *   The merged attributes, as an Attribute object or an array.
   *
   * @throws \InvalidArgumentException
   *   If at least one collection argument is neither an Attribute object nor an
   *   array.
   */
  public static function mergeCollections($a, $b) {
    if (!($a instanceof Attribute || is_array($a)) || !($b instanceof Attribute || is_array($b))) {
      throw new \InvalidArgumentException('Invalid collection argument');
    }

    // If both collections are arrays, just merge them.
    if (is_array($a) && is_array($b)) {
      return NestedArray::mergeDeep($a, $b);
    }

    // If at least one collections is an Attribute object, merge through
    // Attribute::merge.
    $merge_a = $a instanceof Attribute ? $a : new Attribute($a);
    $merge_b = $b instanceof Attribute ? $b : new Attribute($b);
    $merge_a
      ->merge($merge_b);
    return $a instanceof Attribute ? $merge_a : $merge_a
      ->toArray();
  }

}

Members