Estou atualizando um dos meus módulos do Drupal 7 para 8 e estou tendo um problema com meu formulário alterado. Estou adicionando uma função de validação e um manipulador de envio. A função de validação está sendo chamada muito bem, mas a função de envio não está sendo acionada. Gostaria de saber se isso significa que existe uma abordagem no estilo Symfony que precisa ser usada para adicionar manipuladores de envio aos formulários existentes. Pesquisei bastante e não consigo encontrar nenhum exemplo. Também observei alguns módulos D8 em andamento, mas também não encontrei nenhum exemplo de trabalho.
Alguém tem alguma idéia de qual é a maneira correta de Drupal 8 fazer isso?
Respostas:
De acordo com o exemplo em documentação , é o mesmo que para o Drupal 7:
Você pode encontrar lógica (de trabalho) semelhante em
contact_form_user_form_alter()
editor_form_filter_format_form_alter()
locale_form_language_admin_edit_form_alter()
E mais alguns outros.
fonte
Você pode adicionar quantos manipuladores de envio deseja usando o seguinte código:
Se você deseja adicionar um manipulador de envio após o manipulador de envio padrão (um manipulador de envio que será chamado após o retorno de chamada), você pode usar o seguinte.
Para remover o manipulador de envio:
fonte
O comportamento é alterado ou difere de caso para caso. Com o formulário de confirmação Excluir vários nós
O código do @ Clive faz com que o Drupal ignore o manipulador principal. Nesse caso, adicione o manipulador à
$form['#submit']
seção:fonte
Veja como anexar um manipulador de envio personalizado ao formulário de adição / edição do nó do artigo no Drupal 8:
Não foi possível anexar com êxito um manipulador de envio personalizado
$form['#submit']
e ter a função acionada corretamente. Eu tive que anexá-lo explicitamente ao botão Salvar e publicar ao criar um novo artigo, e ao botão Salvar e manter publicado ao editar um artigo existente.Além disso
publish
, aqui estão algumas das outras ações de botão disponíveis:fonte
my_module_node_article_form_submit($form, FormStateInterface $form_state
me deuTypeError: Argument 2 passed to _ccad_content_log_webform_submit() must be an instance of FormStateInterface, instance of Drupal\Core\Form\FormState given
; alterá-lo para_submit($form, $form_state)
corrigir os erros.