Si te encuentras con algún detalle que te causa duda nos puedes dejar un comentario y te ayudaremos lo mas rápido que podamos.
Solución:
Si utiliza hook_form_node_form_alter()
tal vez use código de ejemplo:
function MYMODULE_form_node_form_alter(&$form, DrupalCoreFormFormStateInterface $form_state, $form_id)
foreach (array_keys($form['actions']) as $action)
if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit')
$form['actions'][$action]['#submit'][] = 'mymodule_form_submit';
y para el uso de la función de envío:
function MYMODULE_form_submit(array $form, DrupalCoreFormFormStateInterface $form_state)
//die("I'm not getting run, why :(");
Drupal::service('messenger')->addMessage("Why won't this message show?");
Creación de un complemento de controlador de formulario web personalizado para drupal 8.
Este documento asume que ya instaló y habilitó webform y webform-ui
1) Crea tu formulario web. – Vaya a estructura -> formularios web y presione el botón “+ Agregar formulario web”. – Puedes usar la interfaz de usuario o usar yaml, eso depende de ti. ejemplo yaml para un formulario de un campo que toma una dirección de correo electrónico:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
La sangría es importante para yaml, así que asegúrate de hacerlo bien. las sangrías son espacios.
Ahora guarde su formulario.
2) Creación de un complemento de controlador de formulario web
A continuación, podemos crear un nuevo complemento que aparecerá en la sección “Correos electrónicos/Manejadores” al editar el formulario web. Lo llamaré myhandler, puedes llamarlo como quieras, siempre que reemplaces todas las menciones de myhandler con el nombre que elijas.
a) Cree una nueva carpeta para su complemento, hágalo en su raíz de Drupal (referida aquí como /var/www/html/) en la siguiente subcarpeta: /var/www/html/modules/Custom/myhandler
b) Cree un nuevo archivo en el directorio anterior llamado myhandler.info.yml en este archivo va lo siguiente:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) Cree un directorio src en el directorio de su módulo, por ejemplo: /var/www/html/modules/Custom/myhandler/src in src create Plugin in Plugin create WebformHandler
(esto se puede lograr de una sola vez usando
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
lo que hará toda la estructura de una sola vez usando el indicador -p para mkdir).
4) Crear un nuevo archivo /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
en ese archivo va el siguiente código php, he dejado la configuración del formulario de configuración para que pueda ver cómo configurar su complemento si es necesario.
'https://api.example.org/SOME/ENDPOINT',
];
/**
* @inheritdoc
*/
public function buildConfigurationForm(array $form, FormStateInterface $form_state)
$form['submission_url'] = [
'#type' => 'textfield',
'#title' => $this->t('Submission URL to api.example.org'),
'#description' => $this->t('The URL to post the submission data to.'),
'#default_value' => $this->configuration['submission_url'],
'#required' => TRUE,
];
return $form;
/**
* @inheritdoc
*/
public function submitForm(array &$form, FormStateInterface $form_state, WebformSubmissionInterface $webform_submission)
// Your code here.
// Get an array of the values from the submission.
$values = $webform_submission->getData();
// Get the URL to post the data to.
$post_url = $this->configuration['submission_url'];
$message = "MyHandler got form data:".print_r($values,1);
Drupal::logger('myformhandler')->error($message);
return true;
?>
5) Habilite su módulo MyHandler (usando drush o ampliar el menú) y luego reconstruya su caché de drupal (“drush cr” desde cualquier lugar debajo de su raíz de drupal (/var/www/html aquí) haría eso si usa drush)
6) edite su formulario web, vaya a “Correo electrónico / Controladores” y haga clic en el botón “+ Agregar controlador”. Debería ver su complemento en la lista, haga clic en Agregar controlador, ahora debería ver un cuadro que solicita la URL de envío. haga clic en el botón Guardar. Si algo no se ve bien o no funciona, revise el registro de errores de Apache, puede encontrar algo útil allí.
7) Pruebe su formulario: realice un envío al formulario y luego verifique el registro de vigilancia (drush ws), debería ver los valores que se le envían. Es posible que estén truncados en la salida que ves, no entres en pánico, todo está ahí. Lo que hagas con esto ahora depende de ti.
Espero que esto ayude a alguien. Lo improvisé con cosas que encontré por ahí y lo escribí en un solo documento. Gracias a los demás que me trajeron aquí.
si usaba hook_form_BASE_FORM_ID_alter en Drupal 8 core 8.4.3, encontré que las formas de agregar el controlador de envío personalizado no funcionaban. Esto funcionó para agregar el nombre de la función del controlador de envío:
$form['#submit'][] = 'mymodule_submit_handler';
En otra situación, usando hook_form_FORM_ID_alter en Drupal 8.4.5, descubrí que lo anterior no funcionaba para agregar el controlador de envío personalizado. En cambio, esto funcionó:
$form['actions']['submit']['#submit'][] = 'mymodule_submit_handler';