protected function Attribute::createAttributeValue

protected Attribute::createAttributeValue($name, $value)

Creates the different types of attribute values.

Parameters

string $name: The attribute name.

mixed $value: The attribute value.

Return value

\Drupal\Core\Template\AttributeValueBase An AttributeValueBase representation of the attribute's value.

File

core/lib/Drupal/Core/Template/Attribute.php, line 113

Class

Attribute
Collects, sanitizes, and renders HTML attributes.

Namespace

Drupal\Core\Template

Code

protected function createAttributeValue($name, $value) {
  // If the value is already an AttributeValueBase object,
  // return a new instance of the same class, but with the new name.
  if ($value instanceof AttributeValueBase) {
    $class = get_class($value);
    return new $class($name, $value->value());
  }
  // An array value or 'class' attribute name are forced to always be an
  // AttributeArray value for consistency.
  if ($name == 'class' && !is_array($value)) {
    // Cast the value to string in case it implements MarkupInterface.
    $value = [(string) $value];
  }
  if (is_array($value)) {
    // Cast the value to an array if the value was passed in as a string.
    // @todo Decide to fix all the broken instances of class as a string
    // in core or cast them.
    $value = new AttributeArray($name, $value);
  }
  elseif (is_bool($value)) {
    $value = new AttributeBoolean($name, $value);
  }
  // As a development aid, we allow the value to be a safe string object.
  elseif ($value instanceof MarkupInterface) {
    // Attributes are not supposed to display HTML markup, so we just convert
    // the value to plain text.
    $value = PlainTextOutput::renderFromHtml($value);
    $value = new AttributeString($name, $value);
  }
  elseif (!is_object($value)) {
    $value = new AttributeString($name, $value);
  }
  return $value;
}

© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Template!Attribute.php/function/Attribute::createAttributeValue/8.1.x