メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • DrupalのAJAXのリクエストから変換した$form_stateにある$inputと$valuesのパラメーターの違いと注意点

DrupalのAJAXのリクエストから変換した$form_stateにある$inputと$valuesのパラメーターの違いと注意点

drupal
form
ajax

やりたいこと:DrupalのAJAXのリクエストからクライアント側のフォームデータを取得します

  • 背景:Drupal7.54、DrupalのFormAPIで実装したAJAX
  • クライアント側のイベントでAJAXを動作させ、サーバー側にリクエスト(POST)を送信します
  • サーバー側のajaxコールバック関数の引数($form_state)からクライアント側のフォームデータ(input)を取得します
    • $form_stateに$form_state[input]と$form_state[values]配列があります。どれもクライアント側のフォームデータが入っています
    • $form_state[input]と$form_state[values]にあるフォームデータから、どっちを使用したほうが良いかの議論が良くあります(検索すればいろいろが出てきます)
    • 一般的に$inputのデータの使用を避けたほうが良いとの説明があります(記事:Avoid using data from $form_state['input'])

問題点:$form_state[values]にフォームデータが正しく反映されないことはあります

  • 例:フォームデータに一つのhiddenデータを埋め込みます
    // フォームエレメントの定義
      $form['goto_next']=array(
          '#type' => 'hidden',
          '#value' => 'no',    // 初期値は”no”
      );
  • クライアント側でAJAXを実行する前に、javascriptで「goto_next」を「yes」に変更します
  • AJAX動作させて、コールバック関数内で$form_stateを観察すると、$form_state[values]が初期値のままで変わりませんでした
    Drupalの$form_state['input']と$form_state['values']のデータの違い
  • $form_state['input']($_POSTの生データ)のデータが正しかったです
  • 通常のFormAPIで生成したフォームがこの現象を見られないです

結論:AJAXなどで複雑にデータの交信が行われた場合にフォームデータのやり取りに注意する必要があります

  • 上記問題の原因は不明です(調査する時間がないため)
  • 推定:AJAXで複数回でフォームのエレメントのリプレース操作があり、サーバー側のAJAXリクエスト処理時に何かの問題が発生したと思います
ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)