Symfony 1.4:基于cookie隐藏小部件及其验证器?

时间:2011-05-09 10:47:12

标签: symfony1 symfony-1.4 symfony-forms

在我的网站上,我在用于添加评论的表单中使用了ReCaptcha小部件。一旦表格被正确发送,我就会给用户的计算机写一个cookie。

我想在用户拥有该Cookie时删除ReCaptcha小部件,以便返回的访问者不必键入验证码。我可以在forms/commentForm.class.php中执行此操作,还是需要创建新表单?

2 个答案:

答案 0 :(得分: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
}

希望这有帮助。

答案 1 :(得分: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
    }
  }
}