Я на самом деле только что исправил подобную проблему, когда создавал несколько копий одной формы с защитой csrf.Происходило то, что только последняя созданная форма имела правильный токен csrf.
Небрежный способ справиться с этим - изменить переход в библиотеке Zend (в файле Zend_Form_Element_Hash), чтобы токены неистекает после 1 обновления или загрузки страницы.Это действительно простой способ решить проблему, но он работает, только если вы знаете, сколько раз страница будет загружаться.Это полосное решение
ПРАВИЛЬНЫЙ способ сделать это, когда страница загружена, сделать ajax-вызов, чтобы получить новый обновленный токен.Затем используйте вашу библиотеку javascript (jquery, вероятно, самый простой) и найдите ВСЕ экземпляры токена и замените их все на новый.
Итак, с точки зрения кода это будет выглядеть так: Контроллер:
$ form-> hash-> initCsrfToken ();
$ this-> view-> hash = $ form-> hash-> getValue ();
В вашем js-файле (если вы используете jquery)
$ (. Hash) .replaceWith ('HiddenHtmlPart1'. = Hash. 'HiddenHtmlPart2');Важной частью для селектора является выбор ВСЕХ скрытых элементов.Тогда вам просто нужно заменить внутреннюю часть скрытого элемента.Та же идея применима и к другим библиотекам js, хотя она предполагает использование других методов.