2012-12-21 60 views
1

我有一個頁面,用戶可以發表評論。爲了增加用戶的參與度,我想讓他們輸入他們的評論,即使他們沒有登錄/註冊,只有在他們提交後才登錄。Yii在登錄之前保存表單

什麼是實現這一目標的最佳/標準方法?

目前,訪問登錄頁面只,我使用Yii的loginRequired方法,Redirects the user browser to the login page. Before the redirection, the current URL (if it's not an AJAX url) will be kept in {@link returnUrl} so that the user browser may be redirected back to the current page after successful login.

但是,這僅保存URL,而不是POST數據時。

在附註中,我使用Yii-Rights。

+0

http://www.yiiframework.com/doc/api/1.1/CActiveRecord#onBeforeFind-detail或http://www.yiiframework.com/doc/api/1.1/CModel#onBeforeValidate-detail不知道雖然但你試試這些。 –

回答

0

我還沒有聽說過內置的方式來做到這一點。但是當你點擊這個鏈接時,我假設你點擊了一些保存URL的評論,然後重定向到登錄頁面?

您將首先想要實際觸及動作功能,因此必須允許訪客進入該功能,然後手動執行重定向,而不是讓Yii使用訪問規則等進行操作。

一旦進入你自己的功能,你會想要將該數據綁定到該訪問者一些方式,通常的方式將在$_SESSION,但是當他們登錄時會重新生成。您的其他選項是Cookie數據。

您可以在一個或兩個Cookie中設置評論數據,重定向到您的cookie保存功能的返回URL的登錄頁面,甚至可以使用一個標誌來告訴它檢入COOKIE而不是POST。並從那裏繼續。

希望有幫助,還是我完全錯過了這一點?

更新
確定經過測試後,它顯示SESSION數據會持續通過會話ID重新生成。所以你可以簡單地存儲在會話中。

我喜歡伊恩阿特金斯的方法,但它帶來了垃圾郵件機器人的問題,您必須用某種驗證碼或其他方法進行處理。而如果您將其存儲在會話中,則在用戶登錄或註冊之前,實際上沒有任何內容放入數據庫中。

這取決於你的網站的實力(對垃圾郵件機器人有吸引力)以及在驗證用戶之前顯示多個評論需要多大的靈活性。

+0

爲什麼你認爲$ _SESSION會在登錄後重新生成?如果一個不同的值被保存在$ _SESSION中,那麼它應該在登錄後仍然可用,這將使用另一個不同的值(或更可能是一個數組)。 –

+0

Yii會在用戶登錄時重新生成會話coookie。哪個會擦除會話數據,不是嗎? – Paystey

+0

哦,我的壞,只是做了一個快速測試,它會重新生成會話ID,但它保留了數據。 – Paystey

0

爲每個未登錄的訪問者在$_SESSION中創建一個GUID。使用GUID作爲臨時用戶標識來保存評論。我可能會通過AJAX進行保存,並在回調中將它們發送到登錄/註冊頁面。使用$_SESSION中的GUID將在記錄/註冊前做出的註釋轉換爲具有新/現有用戶ID的完全限定註釋。

在顯示器方面,您可以輕鬆地從ID用戶和從未註冊用戶的用戶並排留言。它使你的'用戶'和'評論'表更加複雜一些,但我認爲這是完全可行的。

+0

爲什麼不直接將它存儲在會話中?爲什麼需要數據庫?爲什麼不簡單地將註釋存儲在'$ _SESSION ['draft']'之類的東西中? –