it-swarm.com.de

So programmieren Sie programmgesteuert ein Kontaktformular in einem Thema in D8

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

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);
8
alexej_d

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 docs ) 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.

6
Berdir