Zend Framework 3:如何使用和(推送)更新进度条?
Zend Framework 3: How to use and (push-)UPDATE progressbar?
目前我在 MVC-Zend-Framework 3 应用程序中使用进度条时遇到问题。
我严格按照 Zend-documentation.
中给出的说明进行操作
但我的问题是,我看到一个空的进度条,它没有更新,而我的长-运行-php-脚本正在运行(没有文件上传,而是计算大约需要几分钟的工作)。看来,进度条的更新函数没有被调用....
一些片段:
a) index.phtml 文件
(备注:与文档相比,我更改了 iframe 的位置和大小以检查我的 long-运行-php-script 的调试输出)
$this->headTitle('Test-Page');
$this->h1('Test-Page');
?>
<style>
#long-running-process {
position: absolute;
left: 100px;
top: 100px;
width: 500px;
height: 500px;
}
#zend-progressbar-container {
width: 100px;
height: 30px;
border: 1px solid #000000;
background-color: #ffffff;
}
#zend-progressbar-done {
width: 0px;
height: 30px;
background-color: #000000;
}
</style>
<script type="text/javascript">
function Zend\ProgressBar\Update(data)
{
document.getElementById('zend-progressbar-done').style.width = data.percent + '%';
}
</script>
<div>
This page demomstrates the use of the Zend Progressbar:
</div>
<div id="zend-progressbar-container">
<div id="zend-progressbar-done"></div>
</div>
<iframe src="long-running-process.php" id="long-running-process"></iframe>
b) 长-运行-php-脚本的一部分:
$this->adapter = new Adapter\JsPush();
$this->progressBar = new ProgressBar($this->adapter,0,100);
//[...]
// in a long running while-loop is this code:
$this->progressBar->update(round($progress));
//end in the end:
$this->progressBar->finish();
如前所述,进度条未更改但保持为零值。不幸的是,我无法在互联网上找到任何有效的例子。
此外,我不仅对 "push" 值感兴趣,而且可能对进度条的一些状态消息感兴趣(如文档中提到的那样),但相应的语法对我来说并不清楚。
提前感谢您的帮助!
好的,暂时我自己回答问题:-)
JsPush-adapter 的 description 指出,更新方法的默认值为
Zend\ProgressBar\Update
如我的问题所示,脚本中的方法正是这个名称。当我将方法重命名为
function ZendProgressBarUpdate(data)
并在适配器初始化后添加以下行:
$this->adapter->setUpdateMethodName("ZendProgressBarUpdate");
一切如预期。
目前我在 MVC-Zend-Framework 3 应用程序中使用进度条时遇到问题。 我严格按照 Zend-documentation.
中给出的说明进行操作但我的问题是,我看到一个空的进度条,它没有更新,而我的长-运行-php-脚本正在运行(没有文件上传,而是计算大约需要几分钟的工作)。看来,进度条的更新函数没有被调用....
一些片段:
a) index.phtml 文件 (备注:与文档相比,我更改了 iframe 的位置和大小以检查我的 long-运行-php-script 的调试输出)
$this->headTitle('Test-Page');
$this->h1('Test-Page');
?>
<style>
#long-running-process {
position: absolute;
left: 100px;
top: 100px;
width: 500px;
height: 500px;
}
#zend-progressbar-container {
width: 100px;
height: 30px;
border: 1px solid #000000;
background-color: #ffffff;
}
#zend-progressbar-done {
width: 0px;
height: 30px;
background-color: #000000;
}
</style>
<script type="text/javascript">
function Zend\ProgressBar\Update(data)
{
document.getElementById('zend-progressbar-done').style.width = data.percent + '%';
}
</script>
<div>
This page demomstrates the use of the Zend Progressbar:
</div>
<div id="zend-progressbar-container">
<div id="zend-progressbar-done"></div>
</div>
<iframe src="long-running-process.php" id="long-running-process"></iframe>
b) 长-运行-php-脚本的一部分:
$this->adapter = new Adapter\JsPush();
$this->progressBar = new ProgressBar($this->adapter,0,100);
//[...]
// in a long running while-loop is this code:
$this->progressBar->update(round($progress));
//end in the end:
$this->progressBar->finish();
如前所述,进度条未更改但保持为零值。不幸的是,我无法在互联网上找到任何有效的例子。
此外,我不仅对 "push" 值感兴趣,而且可能对进度条的一些状态消息感兴趣(如文档中提到的那样),但相应的语法对我来说并不清楚。
提前感谢您的帮助!
好的,暂时我自己回答问题:-)
JsPush-adapter 的 description 指出,更新方法的默认值为
Zend\ProgressBar\Update
如我的问题所示,脚本中的方法正是这个名称。当我将方法重命名为
function ZendProgressBarUpdate(data)
并在适配器初始化后添加以下行:
$this->adapter->setUpdateMethodName("ZendProgressBarUpdate");
一切如预期。