You are here

class EntityView in Services 9.0.x

Same name in this branch
  1. 9.0.x src/Plugin/Deriver/EntityView.php \Drupal\services\Plugin\Deriver\EntityView
  2. 9.0.x src/Plugin/ServiceDefinition/EntityView.php \Drupal\services\Plugin\ServiceDefinition\EntityView
Same name and namespace in other branches
  1. 8.4 src/Plugin/ServiceDefinition/EntityView.php \Drupal\services\Plugin\ServiceDefinition\EntityView

Plugin annotation


@ServiceDefinition(
  id = "entity_view",
  methods = {
    "GET"
  },
  translatable = true,
  deriver = "\Drupal\services\Plugin\Deriver\EntityView"
)

Hierarchy

Expanded class hierarchy of EntityView

File

src/Plugin/ServiceDefinition/EntityView.php, line 27

Namespace

Drupal\services\Plugin\ServiceDefinition
View source
class EntityView extends ServiceDefinitionBase implements ContainerFactoryPluginInterface {

  /**
   * @var RendererInterface
   */
  protected $renderer;

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
    return new static($configuration, $plugin_id, $plugin_definition, $container
      ->get('renderer'), $container
      ->get('asset.resolver'), $container
      ->get('asset.css.collection_renderer'), $container
      ->get('asset.js.collection_renderer'));
  }

  /**
   * @param array $configuration
   * @param string $plugin_id
   * @param mixed $plugin_definition
   * @param RendererInterface $renderer
   */
  public function __construct(array $configuration, $plugin_id, $plugin_definition, RendererInterface $renderer, AssetResolverInterface $asset_resolver, AssetCollectionRendererInterface $css_collection_renderer, AssetCollectionRendererInterface $js_collection_renderer) {
    parent::__construct($configuration, $plugin_id, $plugin_definition);
    $this->renderer = $renderer;
    $this->assetResolver = $asset_resolver;
    $this->cssCollectionRenderer = $css_collection_renderer;
    $this->jsCollectionRenderer = $js_collection_renderer;
  }

  /**
   * {@inheritdoc}
   */
  public function processRoute(Route $route) {
    $route
      ->setRequirement('_entity_access', $this
      ->getDerivativeId() . '.view');
  }

  /**
   * {@inheritdoc}
   */
  public function processRequest(Request $request, RouteMatchInterface $route_match, SerializerInterface $serializer) {
    $view_mode = 'full';
    if ($request->query
      ->has('view_mode')) {
      $view_mode = $request->query
        ->get('view_mode');
    }

    /* @var $entity \Drupal\Core\Entity\EntityInterface */
    $entity = $this
      ->getContextValue($this
      ->getDerivativeId());
    $view_builder = \Drupal::entityTypeManager()
      ->getViewBuilder($entity
      ->getEntityTypeId());
    $render_array = $view_builder
      ->view($entity, $view_mode);
    $result = [];
    $result['body'] = $this->renderer
      ->renderRoot($render_array);
    $all_assets = $this
      ->gatherAssetMarkup($render_array);
    $result += $this
      ->renderAssets($all_assets);
    return $result;
  }

  /**
   * Renders an array of assets.
   *
   * @param array $all_assets
   *   An array of all unrendered assets keyed by type.
   *
   * @return array
   *   An array of all rendered assets keyed by type.
   */
  protected function renderAssets(array $all_assets) {
    $result = [];
    foreach ($all_assets as $asset_type => $assets) {
      $result[$asset_type] = [];
      foreach ($assets as $asset) {
        $result[$asset_type][] = $this->renderer
          ->renderRoot($asset);
      }
    }
    return $result;
  }

  /**
   * Gathers the markup for each type of asset.
   *
   * @param array $render_array
   *   The render array for the entity.
   *
   * @return array
   *   An array of rendered assets. See self::getRenderedEntity() for the keys.
   *
   * @todo template_preprocess_html() should be split up and made reusable.
   */
  protected function gatherAssetMarkup(array $render_array) {
    $assets = AttachedAssets::createFromRenderArray($render_array);

    // Render the asset collections.
    $css_assets = $this->assetResolver
      ->getCssAssets($assets, FALSE);
    $variables['styles'] = $this->cssCollectionRenderer
      ->render($css_assets);
    list($js_assets_header, $js_assets_footer) = $this->assetResolver
      ->getJsAssets($assets, FALSE);
    $variables['scripts'] = $this->jsCollectionRenderer
      ->render($js_assets_header);
    $variables['scripts_bottom'] = $this->jsCollectionRenderer
      ->render($js_assets_footer);

    // @todo Handle all non-asset attachments.
    // $variables['head'] = drupal_get_html_head(FALSE);
    return $variables;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
ContextAwarePluginBase::createContextFromConfiguration protected function Overrides ContextAwarePluginBase::createContextFromConfiguration
ContextAwarePluginTrait::$context protected property The data objects representing the context of this plugin.
ContextAwarePluginTrait::$initializedContextConfig protected property Tracks whether the context has been initialized from configuration.
ContextAwarePluginTrait::getCacheContexts public function 9
ContextAwarePluginTrait::getCacheMaxAge public function 7
ContextAwarePluginTrait::getCacheTags public function 4
ContextAwarePluginTrait::getContext public function
ContextAwarePluginTrait::getContextDefinition public function
ContextAwarePluginTrait::getContextDefinitions public function
ContextAwarePluginTrait::getContextMapping public function
ContextAwarePluginTrait::getContexts public function
ContextAwarePluginTrait::getContextValue public function
ContextAwarePluginTrait::getContextValues public function
ContextAwarePluginTrait::getPluginDefinition abstract protected function 1
ContextAwarePluginTrait::setContext public function 1
ContextAwarePluginTrait::setContextMapping public function
ContextAwarePluginTrait::setContextValue public function
ContextAwarePluginTrait::validateContexts public function
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
EntityView::$renderer protected property
EntityView::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create
EntityView::gatherAssetMarkup protected function Gathers the markup for each type of asset.
EntityView::processRequest public function Processes the request and returns an array of data as appropriate. Overrides ServiceDefinitionInterface::processRequest
EntityView::processRoute public function Checks access for the ServiceDefintion. Overrides ServiceDefinitionBase::processRoute
EntityView::renderAssets protected function Renders an array of assets.
EntityView::__construct public function Overrides ContextAwarePluginBase::__construct
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
ServiceDefinitionBase::getArguments public function Returns an array of service request arguments. Overrides ServiceDefinitionInterface::getArguments
ServiceDefinitionBase::getCategory public function Returns a translated string for the category. Overrides ServiceDefinitionInterface::getCategory
ServiceDefinitionBase::getDescription public function Returns a translated description for the constraint description. Overrides ServiceDefinitionInterface::getDescription
ServiceDefinitionBase::getMethods public function Return an array of allowed methods. Overrides ServiceDefinitionInterface::getMethods
ServiceDefinitionBase::getPath public function Returns the appended path for the service. Overrides ServiceDefinitionInterface::getPath
ServiceDefinitionBase::getTitle public function Returns a translated string for the service title. Overrides ServiceDefinitionInterface::getTitle
ServiceDefinitionBase::processResponse public function Allow plugins to alter the response object before it is returned. Overrides ServiceDefinitionInterface::processResponse
ServiceDefinitionBase::supportsTranslation public function Returns a boolean if this service definition supports translations. Overrides ServiceDefinitionInterface::supportsTranslation
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
TypedDataTrait::$typedDataManager protected property The typed data manager used for creating the data types.
TypedDataTrait::getTypedDataManager public function Gets the typed data manager. 2
TypedDataTrait::setTypedDataManager public function Sets the typed data manager. 2