最初にJSを介して外部サービスによって処理されるフォームがあり、その後フォームに入力フィールドを追加します。
_$('#my-form').once('submit').submit(function(e) {
// some processing
...
form.append($('<input type="hidden" name="token" />').attr('value', token.id));
form.unbind();
form.submit();
});
_
フィールドが追加され、正しい値も含まれています。しかし、それが送信されると、フィールドはpublic function validateForm(array &$form, FormStateInterface $form_state)
のpublic function submitForm(array &$form, FormStateInterface $form_state)
norのどちらにも存在しません。
私はすでにhiddenタイプの代わりにテキストフィールドを使用してみました、そしてCSSでそれを非表示にしましたが、同じ結果
以下のようにbuildForm()
に非表示フィールドを追加できます
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
:
:
$form['token'] = [
'#type' => 'hidden',
'#default_value' => ''
];
:
:
}
または、フォームを自分で作成しない場合、つまり既存のフォームを変更する場合は、 hook_form_alter または hook_form_FORM_ID_alter を使用して非表示フィールドを追加できます。
次に、必要に応じて[〜#〜] js [〜#〜]を使用して値を更新します