使用symfony 2 Framework

时间:2017-02-28 12:50:47

标签: ajax symfony progress-bar

经过几天的研究和测试,我决定将此信息请求作为最后的手段发布: - )

我想做的事情很简单,但尽管我可以做所有的测试......我做不到: - (

使用symfony Framework v2.8,我想在执行控制器操作期间为进度条引导设置动画,并在用户单击按钮时进行动画制作。

我使用的原则是

  • 在执行处理操作期间更新SESSION变量
  • 通过其他操作
  • 读取此SESSION变量

当用户点击按钮时:

  • 使用AJAX我执行我的处理操作
  • 使用AJAX只要我的治疗操作没有完成,我就会执行读取SESSION变量的操作。

简而言之,没有什么比这更复杂的了: - )

我遇到的问题是我的SESSION变量读取操作在执行我的处理操作期间没有执行。在我采取行动之前

治疗是的,是的,但是在......不!

- >我不可能在处理过程中读取SESSION的变量,因此无法为进度条设置动画。

这是JS代码:

$('#generator').click(function() {

    var isInProgress = false;

    traitement();

    function traitement()
    {
        isInProgress = true;
        checkProgress();
        $.ajax({
                type: "GET",
                url: '{{ path('sws_back_createplanning', { 'idChampionnat': Championnat.id })}}',
                async : true,
                cache: false,
                dataType:'html',
                success: function(data){},
                error: function(){  },
                complete: function(){
                    isInProgress = false;
                }
        });
            
    }  

    function checkProgress()
    {
        if( isInProgress != false )
        {
            $.ajax({
                type: "GET",
                url: 'championnat/getprogress/',
                async : true,
                cache: false,
                dataType:'html',
                success: function(data){

                     /* animation de la progress bar */

                 },
                error: function(){  },
                complete: function(){
                    checkProgress();
                }
            });
        } else { }
    }
})

以下是处理操作代码:

public function traitementAction($id){

	
	$session = new Session();
	$session->set('progress', 0);

	// traitement #1

	$session->set('progress', 25);

	// traitement #2

	$session->set('progress', 50);

	// traitement #3

	$session->set('progress', 75);

	// traitement #4

	$session->set('progress', 100);	

	return new Response ("Traitement terminé");

}

以下是SESSION变量的读取操作的代码:

public function getProgressAction(Request $request)
{

	$percent = $this->get('session')->get('progress');
	      
	if ($percent == 100){
		$session = new Session();
		$session->remove('progress');        
	}
	   
	return new Response($percent);  
}

在我的测试中,我还将操作转换为“命令”并使用Process组件执行此“命令”。

  • 使用RUN()方法,检测到与我的控制器操作相同的行为
  • 利用START(异步执行)方法,在执行“命令”的控制器的动作结束时停止执行“命令” - >由于过程的概念

家长/孩子。这意味着,如果我理解正确,一旦父进程(执行控制器操作)结束,这就结束了启动进程的子进程

“COMMAND” - >子进程无法在其父进程中存活。

以下是启动“COMMAND”的控制器操作的代码:

public function commandAction($id)
{
    $commandline = "php console app:generate-planning ".$idChampionnat;
    $process = new Process($commandline);
    $dossier = $this->get('kernel')->getRootDir() . DIRECTORY_SEPARATOR;
    $process->setWorkingDirectory($dossier);

    $process->start();   // https://github.com/symfony/symfony/issues/20513
    $process->wait();    // Pour ne pas que l'exécution de la commande ne soit 'Killée' ... mais empêche la lecture de la variable de SESSION tant que la commande n'est pas terminée
      
    return new Response ("Commande démarrée");
}

总结一下我的问题,我不能同时执行我的两个查询。我当然要错过一些东西......你能帮助我吗?

最好的问候

1 个答案:

答案 0 :(得分:0)

问题解决了...问题在于会话管理(关闭会话)。

- > https://openclassrooms.com/forum/sujet/plusieurs-requetes-ajax-en-meme-temps