He estado actualizando uno de mis módulos Drupal 7 a 8 y tengo un problema con mi formulario alter. Estoy agregando una función de validación y un controlador de envío. La función de validación se llama muy bien, pero la función de envío no se activa. Me pregunto si esto significa que hay un enfoque de estilo Symfony que debe tomarse para agregar controladores de envío a los formularios existentes. He buscado mucho y no puedo encontrar ningún ejemplo. También examiné algunos módulos D8 de trabajo en progreso, pero tampoco he encontrado ejemplos de trabajo allí.
¿Alguien tiene alguna idea de cuál es la forma correcta de Drupal 8 para hacer esto?
Respuestas:
Según el ejemplo en la documentación , es lo mismo que para Drupal 7:
Puede encontrar una lógica (de trabajo) similar en
contact_form_user_form_alter()
editor_form_filter_format_form_alter()
locale_form_language_admin_edit_form_alter()
Y algunos otros además.
fuente
Puede agregar cuántos manejadores de envío desea utilizando el siguiente código:
Si desea agregar un controlador de envío después del controlador de envío predeterminado (un controlador de envío que se llamará después de la devolución de llamada de envío), puede utilizar lo siguiente.
Para eliminar el controlador de envío:
fuente
El comportamiento cambia o difiere de un caso a otro. Con el formulario Nodo Eliminar confirmación múltiple
El código de @ Clive hace que Drupal ignore el controlador principal. En este caso, agregue el controlador a la
$form['#submit']
sección:fuente
Aquí le mostramos cómo adjuntar un controlador de envío personalizado al formulario de agregar / editar nodo del artículo en Drupal 8:
No pude agregar con éxito un controlador de envío personalizado
$form['#submit']
y hacer que la función se active correctamente. Yo tenía para fijar de forma explícita al guardar y publicar botón cuando se crea un nuevo artículo, y adjuntarlo a la Guardar y mantener publicada botón al editar un artículo existente.Además
publish
, estas son algunas de las otras acciones de botón disponibles:fuente
my_module_node_article_form_submit($form, FormStateInterface $form_state
me lo dioTypeError: Argument 2 passed to _ccad_content_log_webform_submit() must be an instance of FormStateInterface, instance of Drupal\Core\Form\FormState given
; cambiándolo a_submit($form, $form_state)
corregido los errores.