Começamos com o Drupal 8 e rapidamente encontramos nosso primeiro problema.
Como devo alterar um formulário existente no Drupal 8?
Precisamos alterar o método save do formulário do nó para redirecionar para outra página. Queremos alterar o formulário do nó para se tornar algo como um formulário de várias etapas. Depois que o usuário cria um novo conteúdo, ele é redirecionado para um novo formulário (criado) para obter mais informações.
Resolvemos nosso problema de implementação hook_entity_type_alter()
.
function mymodule_entity_type_alter(&$entity_info) {
$handlers = $entity_info['node']->get('handlers');
$handlers['form']['default'] = 'Drupal\mymodule\Form\MyExtendedNodeForm';
$handlers['form']['edit'] = 'Drupal\mymodule\Form\MyExtendedNodeForm';
$entity_info['node']->set('handlers', $handlers);
}
Em seguida, criamos uma nova classe de formulário que estende o formulário do nó e altera o método save.
class MyExtendedNodeForm extends NodeForm {
public function save(array $form, FormStateInterface $form_state) {
parent::save($form, $form_state);
$node = $this->entity;
$form_state->setRedirect('entity.regions.add_form', ['nid' => $node->id()]);
}
}
Isso funciona perfeitamente, mas é bom? Se outro módulo fizer o mesmo, nosso código não será mais executado.
save()
método" realmente significa. Significa alterar a maneira como os dados são salvos ou apenas redirecionar? No primeiro caso, a resposta é mais complexa.
hook_form_alter()
. Se você precisar apenas redirecionar o formulário, basta adicionar um manipulador de envio de formulários que faça o redirecionamento.