2017-06-12 225 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解锁会话文件。