[英]In Symfony sub-request, $this->container is null
我想使用symfony實現一個batch request api
。
因此,我在symfony中使用了子請求。 但是在每個控制器中, $this->container
為空。 因為我在項目中使用服務容器。
因此,批處理請求參數如下所示:
{request: [{"url":"/api/user?username=test"}, {"url":"/api/thread?id=123"}]}
以及如下的源代碼:
我想生成一些子請求以減少外部HTTP請求。
foreach($request_list as $k => $v) {
parse_str(parse_url($v['url'], PHP_URL_QUERY), $params);
$req = Request::create(
parse_url($v['url'], PHP_URL_PATH),
"POST",
$params
);
$context = new RequestContext();
$context->fromRequest($req);
$route = $this->get('router');
$matcher = new UrlMatcher($route->getRouteCollection(), $context);
$dispatcher = new EventDispatcher();
$dispatcher->addSubscriber(new RouterListener($matcher));
$resolver = new ControllerResolver();
$kernel = new HttpKernel($dispatcher, $resolver);
$response = $kernel->handle($req, HttpKernelInterface::SUB_REQUEST);
$res[$k] = $response->getContent();
}
你能給我一些提示嗎? 謝謝!
為什么要使簡單的任務變得如此復雜?
在您的控制器中,您可以只創建新的Request
對象並將其傳遞給現有的(已經實例化的) HttpKernel
實例:
foreach($request_list as $k => $v) {
parse_str(parse_url($v['url'], PHP_URL_QUERY), $params);
$req = Request::create(
parse_url($v['url'], PHP_URL_PATH),
"POST",
$params
);
$httpKernel = $this->container->get('http_kernel');
$response = $httpKernel->handle(
$request,
HttpKernelInterface::SUB_REQUEST
);
$res[$k] = $response->getContent();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.