У меня нет примера на данный момент, но я посмотрел на то, как генерируется капча в форме, и я думаю, что вам, возможно, придется сделать, это вернуть новый HTML-код для элемента формы капчи в вашем json ответ, если форма не прошла проверку.
Элемент captcha использует ссылку на изображение, которое создается и сохраняется в папке изображений, а в форме html используется идентификатор, связанный с этим изображением.
Если вы позвоните по номеру $yourForm->getElement('captcha')->render();
и добавите его в ответ json, вы можете обновить свою страницу новым элементом captcha. Единственная проблема заключается в том, что вызов метода render с декораторами по умолчанию может также вернуть теги <dt>
и <dd>
, и вам придется каким-то образом заменить это на javascript в html. Если вы используете пользовательские декораторы, то это может отличаться для вас, или вы можете визуализировать только изображение и скрытые поля, а не метку, и вставить это в тег div.
// in your controller where the form was validated
$form = new Form();
if (form->isValid($this->getRequest()->getPost()) == false) {
$captcha = $form->getElement('captcha')->render();
$json['captchahtml'] = $captcha;
}
$this->view->json = json_encode($json);
Затем в обратном вызове jquery success
проверьте, не прошла ли проверка формы, и обновите html-код.
Надеюсь, это поможет.