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