私のWebサイトでは、コメントの追加に使用するフォームでReCaptchaウィジェットを使用しています。フォームが正しく送信されたら、ユーザーのコンピューターにCookieを書き込みます。
ユーザーがそのCookieを持っているときにReCaptchaウィジェットを削除して、リピーターがキャプチャを入力する必要がないようにします。でそれを行うことはできますかforms/commentForm.class.php
、それとも新しいフォームを作成する必要がありますか?
私のWebサイトでは、コメントの追加に使用するフォームで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
}
}
}