Abbiamo appena iniziato con Drupal 8 e molto rapidamente abbiamo riscontrato il nostro primo problema.
Come devo modificare un modulo esistente in Drupal 8?
È necessario modificare il metodo di salvataggio per il modulo nodo per eseguire un reindirizzamento a un'altra pagina. Vogliamo modificare la forma del nodo per diventare qualcosa di simile a una forma a più fasi. Dopo che l'utente ha creato nuovi contenuti, vengono reindirizzati a un nuovo modulo (abbiamo creato) per ottenere ulteriori informazioni.
Abbiamo risolto il nostro problema di implementazione 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);
}
Abbiamo quindi creato una nuova classe di modulo che estende la forma del nodo e modifica il metodo di salvataggio.
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()]);
}
}
Funziona perfettamente, ma va bene? Se un altro modulo fa lo stesso, il nostro codice non viene più eseguito.
save()
significa effettivamente "alterare il metodo". Significa cambiare il modo in cui i dati vengono salvati o semplicemente reindirizzare? Nel primo caso, la risposta è più complessa.
hook_form_alter()
. Se devi solo reindirizzare il modulo, è sufficiente aggiungere un gestore di invio del modulo che esegua il reindirizzamento.