ZF2 предотвращает отправку нескольких форм

Есть ли способ в формах ZF2 предотвратить многократную отправку форм? Я проверил Captcha а также CSRF элемент с isValid() функция, но они не предотвращают многократную отправку, особенно те, у которых кнопка обновления браузера
заранее спасибо

3

Решение

Да, есть плагин контроллера под названием PRG:

POST / REDIRECT / GET PLUGIN

Цитировать из официальных документов zf2:

Когда пользователь отправляет запрос POST (например, после отправки формы), его
браузер попытается защитить их от повторной отправки POST, взломав
кнопка назад, вызывая предупреждения браузера и всплывающие окна, а иногда
перепост формы. Вместо этого, при получении POST, мы должны хранить
данные в контейнере сеанса и перенаправить пользователя в GET
запрос.

http://framework.zend.com/manual/2.0/en/modules/zend.mvc.plugins.html#the-post-redirect-get-plugin

Расширить дальше своими словами; при использовании этого плагина каждый раз, когда форма отправляется POST, переменные POST сохраняются в сессии, и пользователь перенаправляется либо на другой маршрут, либо просто на тот же маршрут (обновление). Переменные формы затем доступны через плагин PRG в виде простого массива, имитирующего исходный массив POST. Это предотвратит публикацию ФОРМЫ несколько раз.

Использование (из документов ZF2):

// Pass in the route/url you want to redirect to after the POST
$prg = $this->prg('/user/register', true);

if ($prg instanceof \Zend\Http\PhpEnvironment\Response) {
// returned a response to redirect us
return $prg;
} elseif ($prg === false) {
// this wasn't a POST request, but there were no params in the flash messenger
// probably this is the first time the form was loaded
return array('form' => $myForm);
}

// $prg is an array containing the POST params from the previous request
$form->setData($prg);

// ... your form processing code here
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]