Symfony 1.4: скрыть виджет и его валидатор на основе куки? - PullRequest
0 голосов
/ 09 мая 2011

На моем веб-сайте я использую виджет ReCaptcha в форме, используемой для добавления комментариев. После того, как форма была отправлена ​​правильно, я записываю куки на компьютер пользователя.

Я хотел бы удалить виджет ReCaptcha, когда у пользователя есть этот cookie, чтобы возвращающиеся посетители не должны были вводить капчу Могу ли я сделать это в forms/commentForm.class.php или мне нужно создать новую форму?

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Сохраните свой флаг в сеансе:

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

Надеюсь, это поможет.

0 голосов
/ 10 мая 2011

Часто бывает удобно передать экземпляр пользователя в качестве опции при создании формы в действии:

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