You are here

public function EntityResource::get in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/rest/src/Plugin/rest/resource/EntityResource.php \Drupal\rest\Plugin\rest\resource\EntityResource::get()
  2. 9 core/modules/rest/src/Plugin/rest/resource/EntityResource.php \Drupal\rest\Plugin\rest\resource\EntityResource::get()

Responds to entity GET requests.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity object.

\Symfony\Component\HttpFoundation\Request $request: The incoming request.

Return value

\Drupal\rest\ResourceResponse The response containing the entity with its accessible fields.

Throws

\Symfony\Component\HttpKernel\Exception\HttpException

File

core/modules/rest/src/Plugin/rest/resource/EntityResource.php, line 126

Class

EntityResource
Represents entities as resources.

Namespace

Drupal\rest\Plugin\rest\resource

Code

public function get(EntityInterface $entity, Request $request) {
  $response = new ResourceResponse($entity, 200);

  // @todo Either remove the line below or remove this todo in https://www.drupal.org/project/drupal/issues/2973356
  $response
    ->addCacheableDependency($request->attributes
    ->get(AccessAwareRouterInterface::ACCESS_RESULT));
  $response
    ->addCacheableDependency($entity);
  if ($entity instanceof FieldableEntityInterface) {
    foreach ($entity as $field_name => $field) {

      /** @var \Drupal\Core\Field\FieldItemListInterface $field */
      $field_access = $field
        ->access('view', NULL, TRUE);
      $response
        ->addCacheableDependency($field_access);
      if (!$field_access
        ->isAllowed()) {
        $entity
          ->set($field_name, NULL);
      }
    }
  }
  $this
    ->addLinkHeaders($entity, $response);
  return $response;
}