Есть решение:
Создайте, помимо формы, которая будет содержать данные, форму без элементов. Из контроллера вы создаете две формы. Также в контроллере вы добавляете хеш элемента в пустую форму. Обе формы должны быть отправлены в видение. Затем в условии «if ($ request-> isXmlHttpRequest ())» в контроллере вы отображаете пустую форму. Затем вы берете значение хеша с помощью метода "getValue ()". Это значение должно быть отправлено в ответ Ajax, а затем использовать JavaScript для замены устаревшего хеш-значения. Возможность создать пустую форму для хеша состоит в том, чтобы избежать проблем с другими элементами, такими как капча, которая будет генерировать свой идентификатор снова, если форма будет отображена, и также потребуется заменить новую информацию. Проверка будет выполняться отдельно, потому что есть две разные формы. Позже вы можете повторно использовать хэш (пустую) форму, когда захотите. Ниже приведены примеры кода.
//In the controller, after instantiating the empty form you add the Hash element to it:
$hash = new Zend_Form_Element_Hash('no_csrf_foo');
$hash_form->addElement('hash', 'no_csrf_foo', array('salt' => 'unique'));
//...
//Also in the controller, within the condition "if ($request->isXmlHttpRequest())" you render the form (this will renew the session for the next attempt to send the form) and get the new id value:
$hash_form->render($this->view);
$hash_value['hash'] = $hash_form->getElement('no_csrf_foo')->getValue();//The value must be added to the ajax response in JSON, for example. One can use the methods Zend_Json::decode($response) and Zend_Json::encode($array) for conversions between PHP array and JSON.
//---------------------------------------
//In JavaScript, the Ajax response function:
document.getElementById("no_csrf_foo").value = data.hash;//Retrieves the hash value from the Json response and set it to the hash input.
Leo