function CurrentPath::setValue

Sets the data values for this type.

Overrides \Drupal\Core\TypedData\TypedData::setValue().

Parameters

array|null $values: An array of property values.

bool $notify: (optional) Whether to notify the parent object of the change. Defaults to TRUE. If a property is updated from a parent object, set it to FALSE to avoid being notified again.

Overrides Map::setValue

File

src/Plugin/DataType/CurrentPath.php, line 41

Class

CurrentPath
The "current_path" data type.

Namespace

Drupal\rules\Plugin\DataType

Code

public function setValue($values, $notify = TRUE) {
    // @todo Should check if is IteratorAggregate instead, then we can
    // use foreach and treat arrays/objects the same.
    if (isset($values) && !is_array($values)) {
        if (!method_exists($values, 'toArray')) {
            throw new \InvalidArgumentException("Invalid values given. Values must be represented as an associative array.");
        }
        else {
            $this->values = $values->toArray();
        }
    }
    else {
        $this->values = $values;
    }
    // Update any existing property objects.
    foreach ($this->properties as $name => $property) {
        $value = $values[$name] ?? NULL;
        $property->setValue($value, FALSE);
        // Remove the value from $this->values to ensure it does not contain any
        // value for computed properties.
        unset($this->values[$name]);
    }
    // Notify the parent of any changes.
    if ($notify && isset($this->parent)) {
        $this->parent
            ->onChange($this->name);
    }
}