web-dev-qa-db-ja.com

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

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

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

しかし、私は提出の残りの進行状況にも注意を払わなければならないので、これは良い考えではありません。一部の文字を置き換えるだけです。これを行うためのフックはありますか?解決策は何ですか?

16
Pedram Behroozi

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

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

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

22
Madis

おそらく、Drupal( https://api.drupal.org/api/drupal/のform_set_value関数を参照) include!form.inc/function/form_set_value/7 )。

したがって、hook_form_alterで、必要に応じて既存の検証関数の最後に追加することもできます。

$form['#validate'][] = 'mymodule_custom_validation';
2