So programmieren Sie programmgesteuert ein Kontaktformular in einem Thema in D8

8

Wie kann das seitenweite Kontaktformular (Feedback) einzeln in einem benutzerdefinierten Block oder einer anderen Seite angezeigt werden, dann / Kontakt (z. B. Startseite)?

Ich habe diesen Code ausprobiert, aber er funktioniert nicht (sind Kontaktformulare Entitäten?):

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

// get view builder
// render view
$view_builder = \Drupal::entityManager()->getViewBuilder('contact_form');
$full_output = $view_builder->view($entity);
alexej_d
quelle
INFO: 1) Das standardmäßige seitliche Kontaktformular (Feedback) ist eine Entität (nicht das Anmeldeformular). 2) entityManagerwird zugunsten von entityTypeManager( API-Dokumenten )
nilsun
Ich möchte auf eine neue D8-Hauptfrage verweisen, um bei allen Unterfragen wie dieser hier zu helfen, die durch die offene Grundfrage verursacht werden, die hier ausführlich dokumentiert ist: drupal.stackexchange.com/questions/197149/…
nilsun

Antworten:

6

Das Kontaktformular ist eine Entität, die Sie jedoch nicht anzeigen können.

Stattdessen möchten Sie ein Formular für eine Kontaktnachricht mit contact_form als Bundle hinzufügen.

Siehe ContactController::contactSitePage()(EDIT: API-Dokumente ) als Beispiel:

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

// This works in a controller, use \Drupal::service('entity.form_builder') elsewhere.
$form = $this->entityFormBuilder()->getForm($message);
$form['#title'] = SafeMarkup::checkPlain($contact_form->label());

BEARBEITEN (danke @nilsun): Beachten Sie, dass entityManager zugunsten von entityTypeManager veraltet ist.

Berdir
quelle
INFO: entityManagerist zugunsten von entityTypeManager( API-Dokumenten ) veraltet und einige Links fehlen hier in der Antwort. In der Antwort heißt es: Siehe ContactController::contactSitePage() als Beispiel. Wo ist es? Ist es eine Dokumentseite auf Drupal.org? Ist es eine Funktion im Kern? Wie kann man dies in einer Vorverarbeitungsfunktion implementieren, da die Frage nach .theme war? Ende letzten Jahres haben sich die Dinge geändert, und in den meisten Antworten fehlen Informationen zum endgültigen D8-Kern in Bezug auf solche Fragen.
Nilsun
Ich möchte auf eine neue D8-Hauptfrage verweisen, um bei allen Unterfragen wie dieser hier zu helfen, die durch die offene Grundfrage verursacht werden, die hier ausführlich dokumentiert ist: drupal.stackexchange.com/questions/197149/…
nilsun
String :: checkPlain ist jetzt SafeMarkup :: checkPlain
pcambra
1
@pcambra Danke, beachte, dass jeder die Antworten aktualisieren kann. Du kannst so etwas einfach selbst reparieren.
Berdir