LinkManagerBase.php

Same filename in other branches
  1. 8.9.x core/modules/rest/src/LinkManager/LinkManagerBase.php
  2. 8.9.x core/modules/hal/src/LinkManager/LinkManagerBase.php

Namespace

Drupal\hal\LinkManager

File

core/modules/hal/src/LinkManager/LinkManagerBase.php

View source
<?php

namespace Drupal\hal\LinkManager;

use Drupal\serialization\Normalizer\CacheableNormalizerInterface;

/**
 * Defines an abstract base-class for HAL link manager objects.
 */
abstract class LinkManagerBase {
    
    /**
     * Link domain used for type links URIs.
     *
     * @var string
     */
    protected $linkDomain;
    
    /**
     * Config factory service.
     *
     * @var \Drupal\Core\Config\ConfigFactoryInterface
     */
    protected $configFactory;
    
    /**
     * The request stack.
     *
     * @var \Symfony\Component\HttpFoundation\RequestStack
     */
    protected $requestStack;
    
    /**
     * {@inheritdoc}
     */
    public function setLinkDomain($domain) {
        $this->linkDomain = rtrim($domain, '/');
        return $this;
    }
    
    /**
     * Gets the link domain.
     *
     * @param array $context
     *   Normalization/serialization context.
     *
     * @return string
     *   The link domain.
     *
     * @see \Symfony\Component\Serializer\Normalizer\NormalizerInterface::normalize()
     * @see \Symfony\Component\Serializer\SerializerInterface::serialize()
     * @see \Drupal\serialization\Normalizer\CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY
     */
    protected function getLinkDomain(array $context = []) {
        if (empty($this->linkDomain)) {
            if ($domain = $this->configFactory
                ->get('hal.settings')
                ->get('link_domain')) {
                // Bubble the appropriate cacheability metadata whenever possible.
                if (isset($context[CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY])) {
                    $context[CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY]->addCacheableDependency($this->configFactory
                        ->get('hal.settings'));
                }
                return rtrim($domain, '/');
            }
            else {
                // Bubble the relevant cacheability metadata whenever possible.
                if (isset($context[CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY])) {
                    $context[CacheableNormalizerInterface::SERIALIZATION_CONTEXT_CACHEABILITY]->addCacheContexts([
                        'url.site',
                    ]);
                }
                $request = $this->requestStack
                    ->getCurrentRequest();
                return $request->getSchemeAndHttpHost() . $request->getBasePath();
            }
        }
        return $this->linkDomain;
    }

}

Classes

Title Deprecated Summary
LinkManagerBase Defines an abstract base-class for HAL link manager objects.

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