2017-06-12 108 views
0

我有一個連接到Symfony2請求的問題。當我做請求時,一個進程,從MongoDB加載數據,開始。如果我在瀏覽器中打開一個新選項卡,並且我對應用程序(也適用於不同的路由)做出任何請求,儘管我已經關閉了舊選項卡,但會顯示一個空白頁面,等待響應。Symfony2請求併發

會話管理是本地的。我會新的請求殺死所有已經運行的進程。不是會話併發的問題,因爲我想要一個'最後會贏'的方法。我認爲這個問題與HttpKernel的請求處理有關,但我無法解決它。你可以幫我嗎?

這是控制器的動作:

/** 
    * @Security("is_granted('IS_AUTHENTICATED_FULLY')") 
    */ 
    public function searchAction(Request $request, $page = null) 
    { 
     //controlla la lista di autorizzazioni: l'utente può eseguire l'action solo se autorizzato per quell'attributo 
     if ($this->authlist != null) { 
      $authorized = false; 
      foreach ($this->authlist as $auth) { 
       if ($this->security_auth_checker->isGranted($auth, new VoterHelper())) { 
        $authorized = true; 
        break; 
       } 
      } 
      if (!$authorized) { 
       throw new AccessDeniedException("Accesso negato! L'utente non può accedere a questa funzionalità !"); 
      } 
     } 

     //recupera i dati 
     $session = $request->getSession(); 
     $form = $this->formFactory->create($this->formType); 

     $sessionNamePage = $this->formType->getName().'_page'; 
     if (($page) && ($session->get($this->formType->getName()))) { 
      $form_data = $session->get($this->formType->getName()); 
      $form->setData($form_data); 
      $session->set($sessionNamePage, $page); 
     } else { 
      $session->remove($sessionNamePage); 
     } 

     $form->handleRequest($request); 

     if ($form->isValid()) { 
      $form_data = $form->getData(); 
     } 

     //passa alla business logic i parametri della form, i dati di paginazione e offset ed eventualmente la queryString del metodo get 
     if (isset($form_data)) { 
      $queryString = $request->getQueryString(); 

//    $form_data['page'] = $page; 
//    $form_data['offset'] = self::OFFSET; 

      $data = array(); 
      $data['form_data'] = $form_data; 
      $data['page'] = $page; 
      $data['offset'] = self::OFFSET; 
      $data['query_string'] = $queryString; 

      $results = $this->businessLogic->execute($data); 

      if (is_array($results) && isset($results['reportsCounts'])) { 
       $form_data['report_count'] = $results['reportsCounts']; 
       $reports = $results['reports']; 
      } else { 
       $reports = $results; 
      } 
     } 

     if ($form->isValid()) { 
      //   $form_data = $form->getData(); 
      $session->set($this->formType->getName(), $form_data); 
      $sessionNamePage = $this->formType->getName().'_page'; 
      if (!$session->get($sessionNamePage)) { 
       $session->set($sessionNamePage, 1); 
      } 
     } 

     return $this->templating->renderResponse($this->templatePath, array(
       'report_count' => (isset($form_data['report_count'])) ? $form_data['report_count'] : null, 
       'reports' => (isset($reports)) ? $reports : null, 
       'page' => $page, 
       'offset' => self::OFFSET, 
       'form' => $form->createView(), 
     )); 
+0

尋求調試幫助的問題(**「爲什麼代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現它所需的最短代碼* **。沒有**明確問題陳述**的問題對其他讀者無用。請參閱:[如何創建最小,完整和可驗證示例。](http://stackoverflow.com/help/mcve) –

+0

您可以分享您正在使用的代碼嗎? – SunUser

+0

如果我分析探查器,似乎問題是安全防火牆,等待響應.... – DanieleVT

回答

0

我通過調用

$request->getSession()->save(); 

解決問題brefore任何長期的過程。

以這種方式,我強制Symfony解鎖會話文件。