Holen Sie sich programmatisch ein Formular in Drupal 8

12

In der Dokumentation heißt es:

Das an die Methode getForm () übergebene Argument ist der Name der Klasse, die Ihr Formular definiert und eine Implementierung von \ Drupal \ Core \ Form \ FormBuilderInterface ist.

Wie finde ich den Namen der Klasse heraus, die das Feedbackformular für die Website definiert, das vom zentralen Kontaktmodul bereitgestellt wird (die Formular-ID lautet:) feedback_contact_message_form.

Wenn ich dpm()das Formular sehe, sehe ich, dass eine Klasse definiert ist:

$input array(30)
  '#attributes' => array(1)
    'class' => array(3)
      string(29) "feedback-contact-message-form"
      string(20) "contact-message-form"
      string(12) "contact-form"

Ich habe versucht, verschiedene Formen davon als Parameter zu übergeben:

\Drupal::formBuilder()->getForm();

aber kein glück. Vielen Dank

24ma13wg
quelle
1
Kontaktformulare sind Entitäten, also würde ich mir vorstellen, dass sie alle von stammen Drupal\contact\ContactFormEditForm. Ich bin mir nicht sicher, ob es einen einfachen Weg gibt, dies herauszufinden, es sei denn, Sie wissen, dass es sich um eine Entitätsform handelt. Am besten suchen Sie im srcOrdner des Moduls nach Dateien, deren Name auf endet Form.php. Ich denke, das ist eine sichere Konvention
Clive
Würde Berdir's Antwort in meiner Frage nicht helfen? drupal.stackexchange.com/questions/146617/…
alexej_d
Danke, aber ich folge Berdir's Antwort nicht. Ich habe mein Block-Plugin unter meiner Antwort hinzugefügt - und die ersten beiden Zeilen aus Ihrem Codebeispiel hinzugefügt. Wohin gehe ich von hier aus? Vielen Dank.
24ma13wg

Antworten:

13

Dies wird in einem Block-Plugin dargestellt:

class myModule extends BlockBase {
  public function build() {

    $default_form = \Drupal::config('contact.settings')->get('default_form');
    $entity = \Drupal::entityManager()->getStorage('contact_form')->load($default_form);

    $message = \Drupal::entityManager()
      ->getStorage('contact_message')
      ->create(array(
        'contact_form' => $entity->id(),
      ));

    $form = \Drupal::service('entity.form_builder')->getForm($message);

    return $form;
  }
}
24ma13wg
quelle
Ich habe das gleiche Problem. Können wir Notizen teilen und uns unterhalten? Alles, was ich tun möchte, ist, ein Formular von irgendwo auf der Site zu nehmen und es irgendwo anders in einem PHP-fähigen Textfeld auszugeben.
Patoshi パ ト シ
Wie kann ich dieses Entitätsformular programmgesteuert übermitteln?
Unnikrishnan
Wenn das Formular für eine Ajax-Operation auf #after_build reagieren muss, haben wir eine Lösung?
allabakash.g