フォーム送信ハンドラーを変更するにはどうすればよいですか?


16

何らかの理由で、データベースに保存する直前に、任意の形式のすべてのテキストフィールドのいくつかの文字(存在する場合)を置き換える必要があります。言い換えれば、提出されたすべてのデータを取得し、それらの文字を置き換えることができるフックが必要です。
私はこの解決策を見つけました:

function hook_form_alter($form, $form_state, $form_id) {
  $form['#submit'] = 'my_custom_submission_function';
}

ただし、提出の進行状況の残りの部分も処理する必要があるため、これは良い考えではありません。いくつかの文字を置き換えるだけです。これを行うためのフックはありますか?解決策は何ですか?

回答:


22

$form['#submit']フォーム送信ハンドラーの配列を格納します。指定したコードでは、独自のコードのみを追加して上書きしています。希望する結果を得るには、送信ハンドラーを配列の最初の要素として次のように追加する必要があります。

array_unshift($form['#submit'], 'mymodule_custom_submission');

適切な値を適切な形式で取得して一部の文字を置き換えることは、おそらくそれ自体が大きな問題です。何も壊さないように、変更する必要があるフォーム/フィールドを絞り込むことができます。


2

おそらく(でform_set_value関数を参照してくださいDrupalのにより示唆されるように代わりに提出の検証中にこれらの変更を実行する方が良いでしょうhttps://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7)。

あなたが好きなのであれば、あなたのhook_form_alterであなたも、既存の検証関数の最後にそれを追加することができます。

$form['#validate'][] = 'mymodule_custom_validation';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.