メインコンテンツに移動
メインナビゲーション
ホーム
サイトマップ
ビデオ
ご連絡
パンくず
ホーム
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]が初期値のままで変わりませんでした
$form_state['input']($_POSTの生データ)のデータが正しかったです
通常のFormAPIで生成したフォームがこの現象を見られないです
結論:AJAXなどで複雑にデータの交信が行われた場合にフォームデータのやり取りに注意する必要があります
上記問題の原因は不明です(調査する時間がないため)
推定:AJAXで複数回でフォームのエレメントのリプレース操作があり、サーバー側のAJAXリクエスト処理時に何かの問題が発生したと思います
古松
検索
Search
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)