getTargetAttributes example


  public static function compare(Link $a, Link $b) {
    // Any string concatenation would work, but a Link header-like format makes     // it clear what is being compared.     $a_string = sprintf('<%s>;rel="%s"', $a->getHref()$a->rel);
    $b_string = sprintf('<%s>;rel="%s"', $b->getHref()$b->rel);
    $cmp = strcmp($a_string$b_string);
    // If the `href` or `rel` of the links are not equivalent, it's not     // necessary to compare target attributes.     if ($cmp === 0) {
      return (int) !empty(DiffArray::diffAssocRecursive($a->getTargetAttributes()$b->getTargetAttributes()));
    }
    return $cmp;
  }

  /** * Merges two equivalent links into one link with the merged cacheability. * * The links must share the same URI, link relation type and attributes. * * @param \Drupal\jsonapi\JsonApiResource\Link $a * The first link. * @param \Drupal\jsonapi\JsonApiResource\Link $b * The second link. * * @return static * A new JSON:API Link object with the cacheability of both links merged. */
/** * {@inheritdoc} */
  public function normalize($object$format = NULL, array $context = []): array|string|int|float|bool|\ArrayObject|NULL {
    assert($object instanceof LinkCollection);
    $normalized = [];
    /** @var \Drupal\jsonapi\JsonApiResource\Link $link */
    foreach ($object as $key => $links) {
      $is_multiple = count($links) > 1;
      foreach ($links as $link) {
        $link_key = $is_multiple ? sprintf('%s--%s', $key$this->hashByHref($link)) : $key;
        $attributes = $link->getTargetAttributes();
        $normalization = array_merge(['href' => $link->getHref()], !empty($attributes) ? ['meta' => $attributes] : []);
        // Checking access on links is not about access to the link itself;         // it is about whether the current user has access to the route that is         // *targeted* by the link. This is done on a "best effort" basis. That         // is, some links target routes that depend on a request to determine if         // they're accessible or not. Some other links might target routes to         // which the current user will clearly not have access, in that case         // this code proactively removes those links from the response.         $access = $link->getUri()->access($this->currentUser, TRUE);
        $cacheability = CacheableMetadata::createFromObject($link)->addCacheableDependency($access);
        $normalized[$link_key] = $access->isAllowed()
          ?
Home | Imprint | This part of the site doesn't use cookies.