我想在我的控制器中执行一个动作,但在我向用户呈现视图后,这是我的控制器动作
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]);
我看到我可以使用听众和调度员但我并不真正了解他的结构或它是如何工作的。但我也看到了带有terminate事件的httpKernel。不幸的是我没有答案。我不知道哪一个是最好的......
有什么建议吗?
答案 0 :(得分:1)
监听器是构建代码的好方法,但它不会加速您的应用程序。如果要在向用户发送响应后执行代码,则必须使用cron作业或作业调度程序。
我建议您使用JMSJobQueueBundle(documentation)。简而言之,这是做什么的:
def multiply_opt(x, y)
# Not sure if this base case is correct...
return x * y if x.to_s.length <= 1 || y.to_s.length <= 1
# Not sure exactly how to define n
n = [x.to_s.length, y.to_s.length].max
k = (n+1) / 2
x_mid = x.to_s.length - k
y_mid = y.to_s.length - k
a = x.to_s[0..x_mid-1].to_i
b = x.to_s[x_mid..-1].to_i
c = y.to_s[0..y_mid-1].to_i
d = y.to_s[y_mid..-1].to_i
# Recursive Calls
s1 = multiply_opt(a,c)
s2 = multiply_opt(b,d)
s3 = multiply_opt((a + b),(c + d))
s4 = s3 - s1 - s2
(10**(2*k))*s1 + (10**k * s4) + s2
end
答案 1 :(得分:1)
发送响应/视图后,您可以使用javascript和ajax mecanism调用(从视图中)远程php脚本
答案 2 :(得分:0)
也许你可以尝试为活动添加一个监听器&#34; kernel.terminate&#34; (只有当治疗没有改变反应时)。