2012-12-21 63 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']'之类的东西中? –