it-swarm.com.de

Wie gestalte ich ein benutzerdefiniertes Formular?

Ich generiere ein einfaches Modul "myformtest" mit einem einfachen Klassenformular "MyformtestForm". Ich möchte ein anderes Thema für das Formular verwenden.

Ich folgte diesem großartigen Tutorial . Ich habe einen "_theme_suggestions_alter" -Hook in mein "myformtest.module" eingefügt, twig debugging aktiviert und die Formularseite geladen.

(enter image description here

Mein "Vorschlagsthema" ist vorhanden und heißt "form - myformtest-form.html.twig". Dann in meinem Modulverzeichnis:

  • Ich habe ein Unterverzeichnis "Vorlagen" hinzugefügt.
  • Ich habe die Datei twig "form - myformtest-form.html.twig" im Unterverzeichnis "drupal/modules/custom/myformtest/templates" hinzugefügt.

In der Datei twig) habe ich diesen einfachen Code hinzugefügt. (Ich habe ihn aus der Datei drupal/core/themes/classy/templates/form/form.html.twig kopiert und das HTML-Element h1 für hinzugefügt überschreiben)

<h1>TEST</h1>
<form{{ attributes }}>
    {{ children }}
</form>

Ich lösche Caches (drush cr) und habe meine Formularseite neu geladen. Das HTML-Element h1 ("TEST") wird jedoch nicht angezeigt! Wo ist mein Fehler?

[~ # ~] up [~ # ~]

Ich habe es gemacht ! Ich habe das Hook-Thema in meine .module-Datei eingefügt:

function myformtest_theme($existing, $type, $theme, $path)
{
  return array(
    'form__myformtest_form' => array(
      'render element' => 'form',
      'template' => 'form--myformtest-form',
    ),
  );
}

Aber.... ! Wenn ich meine Formularseite lade, wird das HTML-Element h1 "test" angezeigt, nicht jedoch das Formular:/Ich dachte, meine .twig-Datei überschreibt das Standardthema form.html.twig.

(enter image description here

Habe ich etwas verpasst ? Warum wird das Formular nicht angezeigt, wie kann ich es beheben? Und wie kann ich ein benutzerdefiniertes Array von meiner Erstellungsmethode der Formularklasse an meine twig - Vorlage übergeben?

2
matthieu lopez

Das ist die Lösung:

Ich verstehe nicht, warum das Standardformular kopiert und eingefügt wird twig Inhalt funktioniert nicht. (Warum Attribute und untergeordnete Variablen nicht funktionieren)

Ich habe alle verfügbaren Variablen twig Variablen aus meiner benutzerdefinierten Vorlage (über {{dump ()}}) ausgegeben. Ich sehe, ich hatte ein Array mit dem Namen "element". Ich habe dies und seine Arbeit ausprobiert! Formular wird angezeigt.

Dies ist der Code meiner benutzerdefinierten Formularvorlage:

<h1>TEST</h1>
<form{{ element }}></form>
0
matthieu lopez

Ich bin gerade auf ein ähnliches Problem gestoßen. Und löste es wie folgt.

In meinem MYMODULE.module Datei:

function MYMODULE_theme($existing, $type, $theme, $path) {

  return [
    'mythemename' => [
      'render element' => 'form',
      'template' => 'my-template-name',
    ],
  ];
}

In dem $form:

$form['#theme'] = 'mythemename';

Und schließlich in der my-template-name.html.twig Vorlage:

<div class="someclass">
  {{ form }}
</div>
2
David Coote

Das Formularelement verfügt bereits über eine Basisvorlage.

Um die Basisvorlage zu überschreiben, müssen Sie die Datei twig) im Vorlagenverzeichnis Ihres Themas hinzufügen.

Das Vorlagenverzeichnis in Modulen ist vorhanden, um Basisvorlagen bereitzustellen.

0
Eyal

Ich denke, Sie müssen den Inhalt der Datei form.html.twig in Ihre benutzerdefinierte Vorlage kopieren. Anschließend können Sie weitere Änderungen an Ihrer benutzerdefinierten Vorlage vornehmen. Auf diese Weise sollte Ihr Formular auf der Seite gerendert werden.

0
Umed Godd