2016-01-12 27 views
-1

我有很多形式的用戶填寫單頁上,但畢竟用戶做專,控制器將檢查的形式是有效的,如果用戶已經登錄,然後保存信息。用戶提交表單,但不保存,直到他註冊或登錄

需要與

幫助。如果用戶沒有登錄,然後重定向他到註冊頁面,在那裏他註冊並申請後他將自動登錄,那麼它應該回到同一控制器發佈值,因此可以保存。

  • $form->isValid && !$this->getUser()然後重定向用戶註冊頁面,這個表格值保存在會話中?用戶後
  • 註冊或登錄,然後再回到前一個控制器(沒有任何進一步的行動),它應該自動保存先前提交的表單。因爲它是$form->isValid()

我很困惑,我應該保存會話和重定向的表單值嗎?它會正確保存模型值嗎?

而且應該怎麼重定向用戶註冊頁面,同時告訴Symfony的登錄後回來相同的頁面與POST方法。

回答

1

我認爲你必須遵循這種結構:

案例:提交表單頁面重定向後註冊/登錄頁面。

1)填寫表格和形式轉換後的數據之後提交到​​連載陣列。 here

2)糊進行序列化的隱藏字段或會話(註冊/登錄頁面)陣列。

3)填寫登記表,登記後,發回以前的表單頁面和發送隱藏數據到該頁面和反序列化它們。 here

建議:如果您希望您的文章數據頁面沒有顯示,那麼你可以使用進行urlencode和urldecode功能,或者你可以使用任何其他編碼方法。

注意:要使用會話或cookie從一頁發送帖子數據到另一頁是不好的做法。它將在所有頁面上,直到您將其刪除/刪除。

重定向從控制器登錄頁面手動,使用下列內容:

$session->set('_security.user_firewall.target_path', $request->getUri()); 

    throw new AuthenticationException(); // use Symfony\Component\Security\Core\Exception\AuthenticationException; 

註冊頁面重定向,使用下列內容:

  $key = '_security.user_firewall.target_path'; #where "user_firewall" is your firewall name 

     //check if the referrer session key has been set 
     if ($this->container->get('session')->has($key)) 
     { 
      //set the url based on the link they were trying to access before being authenticated 
      $url = $this->container->get('session')->get($key); 

      //remove the session key 
      $this->container->get('session')->remove($key); 
     } 
     // if the referrer key was never set, redirect to a default route 
     else{ 
      $url = $this->generateUrl($routeName); 
     } 

     return new RedirectResponse($url); 
+0

您必須通過用戶的電子郵件ID檢查,無論是註冊用戶還是非註冊用戶。如果沒有重定向到註冊頁面,如果是重定向到登錄頁面。然後序列化發佈數據並將該數據發送到該頁面,然後再次重定向以形成頁面(如果需要),或者將該發佈數據保存在數據庫中,並在重定向到登錄頁面時顯示成功消息 – Monty

+0

。在瀏覽器中,你會看到登錄頁面確定嗎?如果是,那麼你必須在同一頁面上採取上一頁。在隱藏字段中以序列化形式形成數據。 ?如果您在登錄後要採取措施,則必須以prev形式再次重定向它,並將隱藏(序列化)的數據發送到該頁面,並且無需聲明該數據。我認爲它很清楚。如果沒有,那麼我必須在你的機器上工作。 ;) – Monty

+0

我已經弄明白了,謝謝你的幫助。我用編輯器編輯了答案 – Basit

1

對我來說,最簡單的解決方案是把兩個頁面的div的同一頁面上,並使用JavaScript來隱藏未提交表單,所以你並不需要保存和重新填充值。

相關問題