You are here

public function RequestHandler::handle in JSON:API 8

Handles a JSON API request.

Parameters

\Symfony\Component\HttpFoundation\Request $request: The HTTP request object.

\Drupal\jsonapi\ResourceType\ResourceType $resource_type: The JSON API resource type for the current request.

Return value

\Drupal\Core\Cache\CacheableResponseInterface The response object.

File

src/Controller/RequestHandler.php, line 114

Class

RequestHandler
Acts as request forwarder for \Drupal\jsonapi\Controller\EntityResource.

Namespace

Drupal\jsonapi\Controller

Code

public function handle(Request $request, ResourceType $resource_type) {
  $unserialized = $this
    ->deserialize($request, $resource_type);

  // Determine the request parameters that should be passed to the resource
  // plugin.
  $parameters = [];
  $entity_type_id = $resource_type
    ->getEntityTypeId();
  if ($entity = $request
    ->get($entity_type_id)) {
    $parameters[$entity_type_id] = $entity;
  }
  if ($related = $request
    ->get('related')) {
    $parameters['related'] = $related;
  }

  // Invoke the operation on the resource plugin.
  $action = $this
    ->action($request, $resource_type);
  $resource = $this
    ->resourceFactory($resource_type);

  // Only add the unserialized data if there is something there.
  $extra_parameters = $unserialized ? [
    $unserialized,
    $request,
  ] : [
    $request,
  ];
  return call_user_func_array([
    $resource,
    $action,
  ], array_merge($parameters, $extra_parameters));
}