Yii – Captcha и enableAjaxValidation = true

Известна проблема, если в форме используется AjaxValidation, то каптча в ней работает не правильно.

Когда включаем Ajax Validation в виде виджета формы добавления комментария, captcha каждый раз при отправке комментария, выдает ошибку несоответствия. Получается, что когда форма верна, капча меняется в фреймворке, но на странице отображается старая капча.

Решение (добавляем 'on'=>'insert'):

Теперь в контроллере дополняем:

$comment=new Comment('insert'); эквивалентно:

Всё просто:

  • когда работает ajax-валидация, то учитываются все правила из rules, за исключением Captcha (потому что она срабатывает только на сценарий insert);
  • когда жмём кнопку (отправляем форму с данными), всё валидируется и сохраняется (send() сам по умолчанию ещё выполняет validation() перед сохранением).

Теперь ajax проверка не срабатывает на Captcha, а значит та не будет обновляться по асинхронному запросу (невидимо для нас, отсюда ошибки, когда мы видя старую капчу вводим символы с неё, а сравниваются они уже с обновлённой капчей, Qiang Xue в комментариях говорил использовать testLimit и ставить его в “0”, “-1”, и т.д. ). Но мы ставим капчу в конец, перед кнопкой отправить. А нажатие кнопки и так вызовет проверку, но уже правильную, без исключения.

Просмотров : 8512
Запись опубликована в рубрике Yii, Без рубрики с метками , , . Добавьте в закладки постоянную ссылку.

2 комментария: Yii – Captcha и enableAjaxValidation = true

  1. Ярослав говорит:

    что блядь за бред вы несете ?????

  2. Зангар говорит:

    А как Вам такое решение – https://github.com/yiisoft/yii/issues/4008

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *