gpt4 book ai didi

php - 如何使用 StreamedResponse 在 Symfony2 中呈现模板 View

转载 作者:搜寻专家 更新时间:2023-10-31 21:52:02 32 4
gpt4 key购买 nike

我正在尝试使用 streamedResponse 将进度输出到我在 Symfony2 中的索引页面。

下面的这段代码确实显示了我在 api 调用上的进度,但是我在实际 View 中呈现流式信息时遇到了问题。现在它只是在页面顶部输出纯文本,然后在全部完成后呈现 View 。

在加载所有内容之前,我不想返回最终数组并关闭函数,但在输出进度时,我似乎无法显示常规的 Twig 模板。

我尝试过使用渲染器,但除非我返回,否则似乎无法真正将该 View 文件输出到屏幕。

 public function indexAction($countryCode)
{

//anywhere from five to fifteen api calls are going to take place
foreach ($Widgets as $Widget) {

$response = new StreamedResponse();

$curlerUrl = $Widget->getApiUrl()
. '?action=returnWidgets'
. '&data=' . urlencode(serialize(array(
'countryCode' => $countryCode
)));

$requestStartTime = microtime(true);
$curler = $this->get('curler')->curlAUrl($curlerUrl);
$curlResult = json_decode($curler['body'], true);


if(isset($curlResult['data'])){
//do some processing on the data
}

$response->setCallback(function() use ($Widget, $executionTime) {
flush();
sleep(1);
var_dump($Widget->getName());
var_dump($executionTime);
flush();
});

$response->send();
}
//rest of indexAction with a return statement

return array(
//all the vars my template will need
);
}

另外,另一个重要的细节是我试图将所有内容渲染到 Twig 上,这似乎有一些有趣的问题。

最佳答案

据我了解,您只有一次机会从服务器 (PHP/Twig) 向浏览器输出内容,然后由 JavaScript 进行任何进一步的更改(例如更新进度条)。

我建议使用 multi-cURL 异步执行所有 15 个请求。这有效地使总请求时间等于最慢的请求,因此您可以更快地提供您的页面并可能消除对进度条的需要。

// Create the multiple cURL handle
$mh = curl_multi_init();
$handles = array();
$responses = array();

// Create and add the cURL handles to the $mh
foreach($widgets as $widget) {
$ch = $curler->getHandle($widget->getURL()); // Code that returns a cURL handle
$handles[] = $ch;
curl_multi_add_handle($mh, $ch);
}

// Execute the requests
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);

// Get the request content
foreach($handles as $handle) {
$responses[] = curl_multi_getcontent($handle);

// Close the handles
curl_close($handle);
}
curl_multi_close();

// Do something with the responses
// ...

理想情况下,这将是您的 Curler 服务的一个方法。

public function processHandles(array $widgets)
{
// most of the above

return $responses;
}

关于php - 如何使用 StreamedResponse 在 Symfony2 中呈现模板 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39967312/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com