ОК, есть рабочий код. Может быть, это кому-нибудь поможет. Это не совсем красиво, но работает.
private function subRequest(string $controller, $params = []): Response
{
$isPost = false !== strpos($controller, 'post');
/** @var Request $request */
$request = $this->container->get('request_stack')->getCurrentRequest();
$attr = [
'_controller' => $controller,
];
$params = (array)$params;
if ($isPost) {
$subRequest = $this->duplicateRequestForPost($request, $params, $attr);
} else {
$subRequest = $request->duplicate($params, null, $attr);
}
return $this->container->get('http_kernel')
->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
}
/**
* Just to replace $request->content ...
*/
private function duplicateRequestForPost(Request $request, array $postParams, array $attributes): Request
{
$postRequest = new Request(
[],
[],
[],
[],
[],
[],
\Safe\json_encode($postParams)
);
$postRequest->query = $request->query;
$postRequest->request = $request->request;
$postRequest->cookies = $request->cookies;
$postRequest->files = $request->files;
$postRequest->server = $request->server;
$postRequest->attributes = new ParameterBag($attributes);
return $postRequest;
}