2016-04-28 85 views
1

我想执行我的控制器动作,但之后我渲染视图给用户,这里是我的控制器操作的Symfony2控制器发送答案后执行操作

public function addAction(Request $request) 
{ 
    $this->denyAccessUnlessGranted('ROLE_ADMIN', null, 'Vous n\'avez pas les droits pour accéder à cette page'); 
    $preconisation = new Preconisation(); 
    $form = $this->createForm(new PreconisationType($preconisation), $preconisation); 

    if($request->isMethod('POST')) { 
     $form->handleRequest($request); 
     if ($form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      $rapport = $em->getRepository('DataBaseBundle:rapport')->findByIdRapport($preconisation->getRapport()->getIdRapport()); 
      $rapport[0]->incPreco($preconisation->getRapport()->getIdRapport()); 
      $em->persist($preconisation); 
      $em->persist($rapport[0]); 
      $em->flush(); 
      return $this->redirect($this->generateUrl('data_base_preconisation_index')); 
     } 
    } 
    return $this->render('DataBaseBundle:Preconisation:add.thml.twig', array('form' => $form->createView(),'menu' => 1, 
     'leftMenu' => 1,)); 
} 

所以

我想用户后才能执行此已经收到了他的答案,以避免充电时间长

$rapport = $em->getRepository('DataBaseBundle:rapport')->findByIdRapport($preconisation->getRapport()->getIdRapport()); 
       $rapport[0]->incPreco($preconisation->getRapport()->getIdRapport()); 
       $em->persist($rapport[0]); 

我看到了,我可以使用监听器和调度员,但我真的不unders他的结构或它的工作原理。但我也看到了httpKernel与终止事件。不幸的是我没有答案。我不知道哪一个是最好的...

有什么建议吗?

回答

0

侦听器是构建代码的好方法,但它不会加速应用程序。如果要在向用户发送响应后执行代码,则必须使用cron作业或作业计划程序。

我可以推荐使用JMSJobQueueBundledocumentation)。总之,这是做什么:

  1. 创建一个控制台命令,你处理你想要的动作;
  2. 使用控制器,监听器,或任何以create a job

$job = new Job('my-symfony2:command', array('some-args', 'or', '--options="foo"'));

+0

那你知道在哪里可以找到使用监听器的symfony的2.8应用程序的一个例子遥远的PHP脚本?因为在食谱上,理解它的结构并不容易。 – T3ddy

0

也许你可以尝试添加一个侦听事件“kernel.terminate”(仅如果治疗不改变响应)。

1

发送响应/视图后,您可以拨打电话(从视图)使用JavaScript和Ajax mecanism

相关问题