Symfony 1.4: скрыть виджет и его средство проверки на основе файла cookie?

#symfony1 #symfony-1.4 #symfony-forms

#symfony1 #symfony-1.4 #symfony-forms

Вопрос:

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

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

Ответ №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
}
  

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

Ответ №2:

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

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