它已經有幾天了,我正面臨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有問題,改變路線也無濟於事。 –