У мене виникає проблема, коли користувач може надсилати будь-яку форму, побудовану API API декілька разів (швидке клацання призводить до декількох запитів).
Я вклав у базове рішення клієнта (javascript) відключення кнопки, але мені цікаво, який найкращий підхід до запобігання цій ситуації є на стороні сервера.
Чи є рекомендований спосіб використовувати систему токенів форми Drupal для цього? Особливо глобальне рішення форми (тобто додавання користувацького валідатора до кожної форми за допомогою гачок_form_alter ()).
Мій підхід до цього часу був приблизно таким:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
$form['#validate'][] = 'mymodule_form_validate';
}
function mymodule_form_validate(&$form, &$form_state){
//initialize form array
if (!isset($_SESSION['submitted_forms'])){
$_SESSION['submitted_forms'] = array();
}
$form_token = $form_state['values']['form_token'];
if ( isset($_SESSION['submitted_forms'][$form_token]) && $_SESSION['submitted_forms'][$form_token] = TRUE ){
form_set_error('name]', 'This form has already been submitted');
}
else{
$_SESSION['submitted_forms'][$form_token] = TRUE;
}
}
У мене виникають проблеми, коли form_token не є унікальним для форми - він, здається, залишається таким же, незалежно від того, що станеться. Я, мабуть, не розумію, що лексема є у грандіозній схемі форми api.
Будь-яке розуміння цінується!