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.