Como altero o manipulador de envio de formulários?

16

Por alguma razão, preciso substituir alguns caracteres (se existir) em todos os campos de texto de qualquer forma, logo antes de serem armazenados no banco de dados. Em outras palavras, eu preciso de um gancho no qual eu possa obter todos os dados enviados e substituir seus caracteres.
Encontrei esta solução:

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

Mas isso não é uma boa ideia, pois também tenho que cuidar do restante do andamento da submissão. Eu só preciso substituir alguns caracteres. Existe algum gancho para fazer isso? Quais são as soluções?

Pedram Behroozi
fonte

Respostas:

22

$form['#submit']armazena uma matriz de manipuladores de envio de formulários. Com o código que você forneceu, você o substituirá adicionando apenas o seu. Para obter o resultado desejado, você deve adicionar seu manipulador de envio como o primeiro elemento na matriz como este:

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

Obter os valores certos nas formas corretas e substituir alguns caracteres é provavelmente um problema maior por si só. Convém restringir os formulários / campos que você precisa alterar para garantir que você não quebre nada.

Madis
fonte
2

Talvez seja melhor executar essas modificações durante a validação em vez da submissão, conforme sugerido pelo Drupal (consulte a função form_set_value em https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7 ).

Portanto, em seu hook_form_alter, você pode até adicioná-lo ao final das funções de validação existentes, se desejar:

$form['#validate'][] = 'mymodule_custom_validation';
Vishnar Tadeleratha
fonte