0

私のWebサイトでは、コメントの追加に使用するフォームで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 に答える