在我的网站上,我在用于添加评论的表单中使用了ReCaptcha小部件。一旦表格被正确发送,我就会给用户的计算机写一个cookie。
我想在用户拥有该Cookie时删除ReCaptcha小部件,以便返回的访问者不必键入验证码。我可以在forms/commentForm.class.php
中执行此操作,还是需要创建新表单?
答案 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
}
}
}