簡體   English   中英

在Symfony子請求中,$ this-> container為null

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM