Criando um plug-in de manipulador de formulário da web personalizado para o drupal 8.
Este documento pressupõe que você já instalou e ativou o webform e o webform-ui
1) Crie seu formulário da web. - Vá para estrutura -> formulários da web e pressione o botão "+ Adicionar formulário da web". - Você pode usar a interface do usuário ou yaml, isso é com você. exemplo yaml para um formulário de um campo que usa um endereço de email:
email:
'#type': email
'#title': email
'#title_display': invisible
'#placeholder': 'ENTER YOUR EMAIL'
'#attributes':
class:
- my-ip
O recuo é importante para o yaml, portanto, certifique-se de acertar. recuos são espaços.
Agora salve seu formulário.
2) Criando um plug-in de manipulador de formulários da web
Em seguida, podemos criar um novo plug-in que será exibido na seção "Emails / Manipuladores" ao editar o formulário da web. Vou chamá-lo de myhandler, você pode chamar o que quiser, desde que substitua todas as menções de myhandler pelo nome que escolher.
a) Crie uma nova pasta para o seu plug-in, faça isso na sua raiz drupal (referida aqui como / var / www / html /) na seguinte subpasta: / var / www / html / modules / Custom / myhandler
b) Crie um novo arquivo no diretório acima chamado myhandler.info.yml neste arquivo, conforme segue:
name: My Form Handler
description: handles form submits, does something with them.
package: Custom
type: module
version: 1.0
core: 8.x
3) Crie um diretório src no diretório do módulo, por exemplo: / var / www / html / modules / Custom / myhandler / src no src create Plugin in Plugin create WebformHandler
(isso pode ser obtido de uma só vez usando
mkdir -p /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/
que fará a estrutura inteira de uma só vez usando o sinalizador -p no mkdir.)
4) Crie um novo arquivo /var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
nesse arquivo vai o seguinte código php, deixei a configuração do formulário de configuração para que você possa ver como configurar seu plugin, se necessário.
<?php
namespace Drupal\myhandler\Plugin\WebformHandler;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Serialization\Yaml;
use Drupal\Core\Form\FormStateInterface;
use Drupal\webform\Plugin\WebformHandlerBase;
use Drupal\webform\webformSubmissionInterface;
/**
* Form submission handler.
*
* @WebformHandler(
* id = "myhandler_form_handler",
* label = @Translation("MyHandler form handler"),
* category = @Translation("Form Handler"),
* description = @Translation("Do something extra with form submissions"),
* cardinality = \Drupal\webform\Plugin\WebformHandlerInterface::CARDINALITY_SINGLE,
* results = \Drupal\webform\Plugin\WebformHandlerInterface::RESULTS_PROCESSED,
* )
*/
class MyFormHandler extends WebformHandlerBase {
/**
* {@inheritdoc}
*/
public function defaultConfiguration() {
return [
'submission_url' => '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 o módulo MyHandler (usando o menu drush ou estender) e depois reconstrua o cache do drupal ("drush cr" de qualquer lugar abaixo da raiz do drupal (/ var / www / html aqui) faria isso se você usar o drush)
6) edite seu formulário da web, vá para "Email / Manipuladores" e clique no botão "+ Adicionar manipulador" Você deve ver seu plug-in listado, clique em Adicionar manipulador, agora você verá uma caixa solicitando o URL de envio. clique no botão Salvar. Se algo não parece certo ou não está funcionando, verifique o log de erros do apache, você pode encontrar algo útil lá.
7) Teste seu formulário - faça um envio para o formulário e verifique o registro do watchdog (drush ws); você deve ver os valores enviados a ele. Eles podem estar truncados na saída que você vê, não entre em pânico, está tudo lá. O que você faz com isso agora é com você.
Espero que isso ajude alguém. Juntei-o com as coisas que encontrei pelo local e o escrevi em um único documento. Obrigado aos outros que me trouxeram aqui.
hook_form_alter()
ou é um pouco mais difícil dizer o que está fazendo de errado. Além disso, você deve dizer qual formulário você está tentando alterar.