Skip to content

Instantly share code, notes, and snippets.

@Daveiano
Forked from dmouse/SubRequestController.php
Last active February 28, 2020 21:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Daveiano/53d33d84c65fc44a23e2e63cc008f9d1 to your computer and use it in GitHub Desktop.
Save Daveiano/53d33d84c65fc44a23e2e63cc008f9d1 to your computer and use it in GitHub Desktop.
Drupal 8: how to create a sub-request
<?php
use Drupal\content_helper\Controller\SubRequestController;
$httpKernel = \Drupal::service('http_kernel.basic');
$requestStack = \Drupal::requestStack();
$sub_request = new SubRequestController($httpKernel, $requestStack);
$api_response = $sub_request->subRequest(
'/jsonapi/field_config/field_config',
[
'filter' => [
'bundle' => 'institution',
'entity_type' => 'node',
],
'page' => [
'offset' => '50',
],
]
);
<?php
namespace Drupal\content_helper\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpFoundation\Request;
/**
* Class SubRequest.
*
* @package Drupal\content_helper\Controller
*/
class SubRequestController extends ControllerBase implements ContainerInjectionInterface {
/**
* Symfony\Component\HttpKernel\HttpKernelInterface definition.
*
* @var Symfony\Component\HttpKernel\HttpKernelInterface
*/
protected $httpKernel;
/**
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
protected $requestStack;
/**
* {@inheritdoc}
*/
public function __construct(HttpKernelInterface $http_kernel, RequestStack $request_stack) {
$this->httpKernel = $http_kernel;
$this->requestStack = $request_stack;
}
/**
* Performs a subrequest.
*
* @param string $path
* Path to use for subrequest.
* @param string $method
* The HTTP method to use, eg. Get, Post.
* @param array $parameters
* The query parameters.
* @param string|resource|null $content
* The raw body data.
*
* @return string
* The response String.
*
* @throws \Exception
*/
public function subRequest($path, $method = 'GET', array $parameters = [], $content = NULL) {
$sub_request = Request::create($path, $method, $parameters, $cookies = [], $files = [], $server = [], $content);
$sub_request->setSession($this->requestStack->getCurrentRequest()->getSession());
$subResponse = $this->httpKernel->handle($sub_request, HttpKernelInterface::SUB_REQUEST, FALSE);
return $subResponse->getContent();
}
}
@WesWedding
Copy link

Thanks for sharing this, it was very helpful in working out some issues I had with my own subrequest implementation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment