2016-04-28 47 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]); 

を避けるために、彼の答えを受け取った後、私は私がリスナーとディスパッチャを使用することができることを見ましたが、私は本当にアンダーません、これを実行したいと思います彼の構造やそれがどのように機能するかを示します。しかし、私はまた、終了イベントでhttpKernelを見た。残念ながら私は答えがありません。私はどちらが最高かわからない...

何かアドバイスはありますか?

答えて

0

リスナーはコードを構造化するのに適していますが、アプリケーションのスピードアップには役立ちません。ユーザーに応答を送信した後にコードを実行する場合は、cronジョブまたはジョブスケジューラを使用する必要があります。

JMSJobQueueBundledocumentation)の使用をお勧めします。要するに、これは何をすべきかです:

  1. あなたが望むアクションを処理するには、コンソールコマンドを作成します。
  2. create a jobにあなたのコントローラー、リスナー、または何を使用してください:

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

+0

を使用して(ビューから)遠くのPHPスクリプトを呼び出すことができますし、私はsymfonyの2.8アプリのリスナーの使用例を見つけることができる場所を知っています?料理本にその原因を理解するのは簡単ではありません。 – T3ddy

0

たぶん、あなたは治療が応答を変更しない場合にのみ、(イベントにリスナーを追加するために「kernel.terminate」を試すことができます)。

1

応答/ビューを送信した後は、JavaScriptやAjaxのmecanism

関連する問題