Zend Framework 3: Как использовать и (push-) UPDATE индикатор прогресса? - PullRequest
0 голосов
/ 17 мая 2018

В настоящее время у меня проблемы с использованием индикатора выполнения в приложении MVC-Zend-Framework 3. Я строго следовал инструкциям, приведенным в Zend-документации .

Но моя проблема в том, что я вижу пустой индикатор выполнения, который не обновляется, в то время как мой долго работающий php-скрипт работает (не загрузка файла, а работа по вычислению, которая занимает около пары минут). Похоже, что функция обновления для индикатора выполнения не вызывается ....

Некоторые фрагменты:

а) файл index.phtml (Примечание: по сравнению с документацией я изменил положение и размер iframe для проверки результатов отладки моего долгоиграющего php-скрипта)

$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();

Как уже было сказано, индикатор выполнения не изменяется, а остается с нулевым значением. К сожалению, я не смог найти никаких рабочих примеров в интернете

Кроме того, мне интересно «толкать» не только значение, но, возможно, и некоторые сообщения о состоянии на индикатор выполнения (как уже упоминалось в документации), но соответствующий синтаксис для меня неясен.

Заранее спасибо за любую помощь!

1 Ответ

0 голосов
/ 18 мая 2018

Хорошо, пока я могу ответить на вопрос самостоятельно: -)

В описании JsPush-адаптера указано, что значением по умолчанию для метода обновления является

Zend \ ProgressBar \ Update

и, как показано в моем вопросе, метод в сценарии имел именно это имя. Когда я переименовал метод в что-то вроде

function ZendProgressBarUpdate(data)

и добавил после инициализации адаптера следующую строку:

$this->adapter->setUpdateMethodName("ZendProgressBarUpdate");

все работало как положено.

...