Wir haben gerade mit Drupal 8 angefangen und sind sehr schnell auf unser erstes Problem gestoßen.
Wie soll ich ein bestehendes Formular in Drupal 8 ändern?
Wir müssen die Speichermethode für das Knotenformular ändern, um auf eine andere Seite umzuleiten. Wir möchten die Knotenform so ändern, dass sie einer mehrstufigen Form ähnelt. Nachdem der Benutzer neuen Inhalt erstellt hat, wird er in ein neues Formular umgeleitet (das wir erstellt haben), um weitere Informationen zu erhalten.
Wir haben unser Problem gelöst 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);
}
Anschließend haben wir eine neue Formularklasse erstellt, die das Knotenformular erweitert und die Speichermethode ändert.
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()]);
}
}
Das funktioniert einwandfrei, aber ist es gut? Wenn ein anderes Modul dasselbe tut, wird unser Code nicht mehr ausgeführt.
save()
Methode" tatsächlich bedeutet. Bedeutet das, die Art und Weise zu ändern, wie Daten gespeichert werden, oder einfach eine Umleitung durchzuführen? Im ersten Fall ist die Antwort komplexer.
hook_form_alter()
. Wenn Sie das Formular nur umleiten müssen, ist es ausreichend, einen Formularübergabehandler hinzuzufügen, der die Umleitung ausführt.