getHref example


class LinkTest extends TestCase
{
    public function testCanSetAndRetrieveValues()
    {
        $link = (new Link())
            ->withHref('http://www.google.com')
            ->withRel('next')
            ->withAttribute('me', 'you')
        ;

        $this->assertEquals('http://www.google.com', $link->getHref());
        $this->assertContains('next', $link->getRels());
        $this->assertArrayHasKey('me', $link->getAttributes());
        $this->assertEquals('you', $link->getAttributes()['me']);
    }

    public function testCanRemoveValues()
    {
        $link = (new Link())
            ->withHref('http://www.google.com')
            ->withRel('next')
            ->withAttribute('me', 'you')
        ;

  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()
          ? new CacheableNormalization($cacheability$normalization)
          :

  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. */
if (!\is_bool($value)) {
                    $attributesParts[] = sprintf('%s="%s"', $keypreg_replace('/(?<!\\\\)"/', '\"', $value));

                    continue;
                }

                if (true === $value) {
                    $attributesParts[] = $key;
                }
            }

            $elements[] = sprintf('<%s>%s', $link->getHref()implode('; ', $attributesParts));
        }

        return $elements ? implode(',', $elements) : null;
    }
}
Home | Imprint | This part of the site doesn't use cookies.