CollectResourceObjectMetaEvent.php

Namespace

Drupal\jsonapi\Events

File

core/modules/jsonapi/src/Events/CollectResourceObjectMetaEvent.php

View source
<?php

declare (strict_types=1);
namespace Drupal\jsonapi\Events;

use Drupal\Component\Utility\NestedArray;
use Drupal\Core\Cache\RefinableCacheableDependencyInterface;
use Drupal\Core\Cache\RefinableCacheableDependencyTrait;
use Drupal\jsonapi\JsonApiResource\ResourceObject;
use Drupal\Component\EventDispatcher\Event;

/**
 * Event for collecting resource object metadata of a JSON:API resource types.
 *
 * Subscribers of this event that call ::setMetaValue() must set the appropriate
 * cache tags and contexts. These should be based on the data that is used to set
 * the meta. These will then bubble up to the normalization.
 *
 * @Event
 */
final class CollectResourceObjectMetaEvent extends Event implements RefinableCacheableDependencyInterface {
    use RefinableCacheableDependencyTrait;
    
    /**
     * The metadata.
     *
     * @var array
     */
    private array $meta = [];
    
    /**
     * Constructs a new CollectResourceObjectMetaEvent object.
     *
     * @param \Drupal\jsonapi\JsonApiResource\ResourceObject $resourceObject
     *   The resource object.
     * @param array $context
     *   The context options for the normalizer.
     */
    public function __construct(ResourceObject $resourceObject, array $context) {
        if (empty($context['resource_object']) || !$context['resource_object'] instanceof ResourceObject || $this->context['resource_object']
            ->getId() !== $this->resourceObject
            ->getId()) {
            throw new \RuntimeException('The context must contain a valid resource object.');
        }
    }
    
    /**
     * Gets the resource object.
     *
     * @return \Drupal\jsonapi\JsonApiResource\ResourceObject
     *   The resource object.
     */
    public function getResourceObject() : ResourceObject {
        return $this->resourceObject;
    }
    
    /**
     * Gets context options for the normalizer.
     *
     * @return array
     *   The context options for the normalizer.
     */
    public function getContext() : array {
        return $this->context;
    }
    
    /**
     * Gets the meta values.
     *
     * @return array
     *   The meta data.
     */
    public function getMeta() : array {
        return $this->meta;
    }
    
    /**
     * Sets a meta value.
     *
     * @param array|string $property
     *   The key or array of keys.
     * @param mixed $value
     *   The value.
     *
     * @return $this
     */
    public function setMetaValue(array|string $property, mixed $value) : self {
        NestedArray::setValue($this->meta, (array) $property, $value, TRUE);
        return $this;
    }

}

Classes

Title Deprecated Summary
CollectResourceObjectMetaEvent Event for collecting resource object metadata of a JSON:API resource types.

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