它已经有几天了,我正面临Symfony奇怪的行为。 我有一个行动,其中由于某种原因,我需要在会话中存储随机值作为表单随机数。 nonce被传递给树枝模板以供ajax函数使用。Symfony2 |为什么控制器操作执行两次
在向对应的操作发送nonce时,会检查差异nonce值,因此请求会被拒绝。
测试显示该操作由Symfony执行两次,因此将存储新的随机数而不更新前端。我无法确定原因。
经过数百次测试后,我发现路线上的微小变化可以解决问题,但我不相信这是最终的解决方案,我找不到根本原因。
任何人都可以帮忙吗?
这里是有问题的代码:
/**
*
* Condo Apartments management
*
* @Route("/condo/apartment")
*/
class ApartmentController extends Controller
{
/**
* Index Condo Apartments
*
* @Route("/edit/{id}/{apartment}", name="edit_apartment")
* @Route("/manage/{id}", name="manage_apartments")
* @ParamConverter("apartment", class="RimakishCondominiumBundle:Apartment", options={"mapping":{"apartment"="id"}})
* @Method({"GET", "POST"})
*/
public function indexApartmentsAction(Request $request, Complex $complex, Apartment $apartment=null){
$session = $request->getSession();
$nonce = sha1(uniqid());
if($session->has('nonce')){
$session->remove('nonce');
}
$session->set('nonce', $nonce);
我只是改变了第一条路线如下,它的工作。现在我需要知道这个问题的根源。
* @Route("/{id}/{apartment}/edit", name="edit_apartment")
我正在使用Symfony 2.8 –
最简单的原因通常是正确的答案。看起来你的ajax函数可能会调用URL两次。你应该调试完整的请求 - 这应该是非常明显的,如果这个方法被通过ajax多次调用。 – Richard
谢谢理查德,但那是我测试的一部分。我对服务器 - 客户端通信进行了严格的监控,以确保没有从浏览器发送到服务器的额外查询。我也检查了相同的服务器端的Doctrine查询的数量。请记住,ajax调用另一个操作,我修改了Route来解决问题。如果ajax有问题,改变路线也无济于事。 –