0

在我的网站上,我使用用于添加评论的表单中的 ReCaptcha 小部件。正确发送表单后,我将 cookie 写入用户的计算机。

当用户拥有该 cookie 时,我想删除 ReCaptcha 小部件,以便回访者不必输入验证码。我可以这样做forms/commentForm.class.php,还是需要创建一个新表单?

4

2 回答 2

1

在会话中保存您的标志:

<?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
}

希望这可以帮助。

于 2011-05-09T11:57:23.650 回答
0

在创建表单时,将 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
    }
  }
}
于 2011-05-10T11:58:20.993 回答