¿Cómo modifico el controlador de envío de formularios?

16

Por alguna razón, necesito reemplazar algunos caracteres (si existen) en cada campo de texto en cualquier forma justo antes de que se almacenen en la base de datos. En otras palabras, necesito un gancho en el que pueda obtener todos los datos enviados y reemplazar sus caracteres.
Encontré esta solución:

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

Pero esta no es una buena idea ya que también tengo que ocuparme del resto del progreso de la presentación. Solo necesito reemplazar algunos personajes. ¿Hay algún gancho para hacer esto? ¿Cuáles son las soluciones?

Pedram Behroozi
fuente

Respuestas:

22

$form['#submit']almacena una variedad de controladores de envío de formularios. Con el código que proporcionó, lo sobrescribe agregando solo el suyo. Para obtener el resultado que desea, debe agregar su controlador de envío como el primer elemento en la matriz de esta manera:

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

Obtener los valores correctos en las formas correctas y reemplazar algunos caracteres es probablemente un problema mayor en sí mismo. Es posible que desee limitar los formularios / campos que necesita cambiar para asegurarse de no romper nada.

Madis
fuente
2

Quizás sería mejor realizar estas modificaciones durante la validación en lugar de enviarlas como sugiere Drupal (vea la función form_set_value en https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7 ).

Entonces, en su hook_form_alter, incluso podría agregarlo al final de las funciones de validación existentes si lo desea:

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