it-swarm.com.de

Programmgesteuert rendern Sie ein Node Formular mit einem benutzerdefinierten Formularanzeigemodus bearbeiten

Ich versuche, eine Seite zu erstellen, auf der Benutzer Daten für einen bestimmten Inhaltstyp bearbeiten können, aber ich möchte nur, dass sie Zugriff auf einige der Felder haben, nicht auf alle. Zu diesem Zweck habe ich einen benutzerdefinierten Formularanzeigemodus für Inhalte erstellt. Ich habe einen benutzerdefinierten Controller, der dieses Formular mit einem benutzerdefinierten Anzeigemodus anzeigen soll. Hier ist der Code, der es rendern soll.

    public function showCustomForm() {
        $node = \Drupal::entityTypeManager()->getStorage('node')->load('123');
        $edit_form = \Drupal::entityTypeManager()->getFormObject('node', 'my_custom_form_display_mode_id')->setEntity($node);
        return \Drupal::formBuilder()->getForm($edit_form);
    }

Und ich bekomme den Fehler

Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException: Der Entitätstyp "node" hat keine Formularklasse "my_custom_form_display_mode_id" angegeben. in Drupal\Core\Entity\EntityTypeManager-> getFormObject () (Zeile 184 von /var/www/mydomain/http/web/core/lib/Drupal/Core/Entity/EntityTypeManager.php).

Ich habe dies verwendet Wie lade ich ein Formular mit einer bestimmten Formularanzeige (Formularmodus)? als Beispiel. Hatte aber immer noch kein Glück.

Wie würde ich ein Knotenbearbeitungsformular programmgesteuert mit einem benutzerdefinierten Formularanzeigemodus laden?

4
Matt

Die Fehlermeldung besagt, dass Sie keine Formularklasse angegeben haben, aber wirklich sagen möchten, dass Sie keine Formularoperation mit dem Namen des Formularmodus angegeben haben:

mymodule.module :

function mymodule_entity_type_build(array &$entity_types) {
  $entity_types['node']->setFormClass('my_custom_form_display_mode_id', 'Drupal\node\NodeForm');
}

Die Formularoperation benötigt eine Formularklasse. Dies kann dieselbe sein wie für die Standardeinstellung, die Sie im Abschnitt "Handler" der Anmerkungen in der Klasse Node) finden.

5
4k4