Если нужно отправить форму методом get на внешний адрес и при этом не хочется светить form_build_id
, form_token
, form_id
и op
:
Drupal 8
class ExampleForm extends FormBase {
/**
* Form builder.
*/
public function buildForm(array $form, FormStateInterface $form_state): array {
...
$form['#method'] = 'GET';
$form['#pre_render'][] = [$this, 'preRender'];
return $form;
}
/**
* Pre-render form callback.
*/
public function preRender(array $form): array {
unset($form['form_id']);
unset($form['form_build_id']);
unset($form['form_token']);
unset($form['submit']['#name']);
return $form;
}
}
Drupal 7
/**
* Form builder.
*/
function mymodule_myform($form, &$form_state) {
$form['#action'] = 'http://example.com/path';
$form['#method'] = 'GET';
$form['#pre_render'][] = 'mymodule_myform_pre_render';
...
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
'#name' => '',
);
return $form;
}
/**
* Form pre render callback.
*/
function mymodule_myform_pre_render($form) {
unset($form['form_token']);
unset($form['form_build_id']);
unset($form['form_id']);
unset($form['submit']['#name']);
return $form;
}
Написанное актуально для
Drupal 7, Drupal 8+
Похожие записи
- Установка невидимой капчи от гугла (Invisible reCaptcha v3)
- Вывести дефолтное значение элемента формы с помощью #lazy_builder
- Inline Form Errors только у конкретных форм
- Восстанавливаем позицию текстового курсора при ajax обновлении формы
- Как выполнять свой js-код до или после любых AJAX запросов (изменение работы AJAX API)
Комментарии
Если форму отправлять на сторонний ресурс, то зачем вообще использовать Forms API, если не использовать все преимущества (обработчики, Ajax), ну разве что валидация остается. Обычная HTML-форма решит задачу.
1. альтеринг
2. темизация
3. препроцессинг
4. ajax
На самом деле все уже придумано до нас. Для этого есть функция
Только использовать ее нужно при сабмите формы.
***Но это можно использовать, если нужна валидация формы и при сабмите запрос отправляется через drupal_goto, например:
Добавить комментарий