web-dev-qa-db-ja.com

JSを通じて追加されたときに入力フィールドがフォームに送信されない

最初に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でそれを非表示にしましたが、同じ結果

2
Matthias

以下のように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 [〜#〜]を使用して値を更新します

1
Razeem Ahmad