在我的网站上,我使用用于添加评论的表单中的 ReCaptcha 小部件。正确发送表单后,我将 cookie 写入用户的计算机。
当用户拥有该 cookie 时,我想删除 ReCaptcha 小部件,以便回访者不必输入验证码。我可以这样做forms/commentForm.class.php
,还是需要创建一个新表单?
在我的网站上,我使用用于添加评论的表单中的 ReCaptcha 小部件。正确发送表单后,我将 cookie 写入用户的计算机。
当用户拥有该 cookie 时,我想删除 ReCaptcha 小部件,以便回访者不必输入验证码。我可以这样做forms/commentForm.class.php
,还是需要创建一个新表单?
在会话中保存您的标志:
<?php
...
if ($form->isValid()) {
...
// comment added
$this->getUser()->setAttribute('is_bot', false);
...
}
在另一个动作中:
<?php
$this->form = new CommentForm();
if ($this->getUser()->getAttribute('is_bot', true)) {
$this->form->setWidget(); // set captcha widget
$this->form->setValdiator(); // set captcha valdiator
}
希望这可以帮助。
在创建表单时,将 User 实例作为选项传递通常很方便:
public function executeNew(sfWebRequest $request)
{
$this->form = new ModelForm(null, array('user'=>$this->getUser));
}
现在您可以根据用户会话属性配置表单:
class ModelForm extends BaseModelForm
{
public function configure()
{
if ($this->getOption('user')->getAttribute('is_bot', false)
{
//set your widgets and validators
}
}
}