首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在控制器中发送答案后,Symfony2执行一个操作

在控制器中发送答案后,Symfony2执行一个操作
EN

Stack Overflow用户
提问于 2016-04-28 08:55:17
回答 3查看 148关注 0票数 1

我想在我的控制器中执行一个操作,但是在我将视图呈现给用户之后,这里是我的控制器操作。

代码语言:javascript
代码运行次数:0
运行
复制
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,));
}

所以

我想在用户收到他的答案后执行这个操作,以避免很长的充电时间。

代码语言:javascript
代码运行次数:0
运行
复制
$rapport = $em->getRepository('DataBaseBundle:rapport')->findByIdRapport($preconisation->getRapport()->getIdRapport());
                $rapport[0]->incPreco($preconisation->getRapport()->getIdRapport());
                $em->persist($rapport[0]);

我看到我可以使用侦听器和调度员,但我并不真正理解他的结构或它是如何工作的。但是我也看到了带有终止事件的httpKernel。不幸的是我没有答案。我不知道哪一个是最好的。

有什么建议吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-28 09:09:11

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

我可以推荐使用JMSJobQueueBundle (文档)。简而言之,这就是要做的事情:

  1. 创建一个控制台命令来处理您想要的操作;
  2. 将控制器、侦听器或其他任何东西用于创造工作

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

票数 1
EN

Stack Overflow用户

发布于 2016-04-28 13:55:25

发送响应/视图后,可以使用javascript和ajax (从视图)调用一个远程php脚本。

票数 1
EN

Stack Overflow用户

发布于 2016-04-28 10:49:34

也许您可以尝试将侦听器添加到事件"kernel.terminate“(只有在处理不改变响应的情况下)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36909813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档