2016-04-28 10 views
1

Senden Perform ich möchte eine Aktion in meinem Controller durchzuführen, aber nachdem ich die Ansicht für den Benutzer hier wiedergegeben ist mein Controller-AktionSymfony2 eine Aktion nach der Antwort in der Steuerung

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,)); 
} 

So

ich möchte diese, nachdem der Benutzer auszuführen hat seine Antwort erhalten eine lange Ladezeit

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

ich sah, zu vermeiden, dass ich Hörer und Dispatcher verwenden könnte, aber ich weiß nicht wirklich unders und seine Struktur oder wie es funktioniert. Aber ich sah auch den httpKernel mit dem Ereignis terminate. Leider habe ich keine Antwort. Ich weiß nicht, welches ist das beste ...

Irgendwelche Beratung?

Antwort

0

Ein Listener ist eine gute Möglichkeit, Ihren Code zu strukturieren, aber er wird Ihre Anwendung nicht beschleunigen. Wenn Sie nach dem Senden einer Antwort an den Benutzer Code ausführen möchten, müssen Sie einen Cron-Job oder Job-Scheduler verwenden.

Ich kann empfehlen, JMSJobQueueBundle (documentation) zu verwenden. Kurz gesagt, Folgendes ist zu tun:

  1. Erstellen Sie einen Konsolenbefehl, den Sie mit der gewünschten Aktion ausführen; Verwenden Sie
  2. Ihren Controller, Hörer, oder was auch immer zu create a job:

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

+0

Und wissen Sie, wo ich ein Beispiel für die Verwendung von Hörern eines symfony 2.8 App finden ? Auf dem Kochbuch ist es nicht wirklich leicht, die Struktur zu verstehen. – T3ddy

0

Vielleicht können Sie versuchen, einen Zuhörer auf das Ereignis „kernel.terminate“ hinzufügen (nur dann, wenn die Behandlung nicht die Antwort nicht verändert).

1

Nach dem Senden der Antwort/Ansicht können Sie (aus der Sicht) rufen einen ferner PHP-Skript JavaScript und Ajax mecanism mit

Verwandte Themen