web-dev-qa-db-fra.com

Comment rendre par programme un formulaire de contact dans un thème dans D8

Comment obtenir le formulaire de contact latéral (commentaires) affiché individuellement dans un bloc personnalisé ou une autre page puis/contact (par exemple, la page d'accueil)?

J'ai essayé ce code, mais il ne fonctionne pas (les formulaires de contact sont-ils des entités?):

// 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

Le formulaire de contact est une entité, mais vous ne pouvez pas le voir.

Ce que vous voulez à la place, c'est un formulaire d'ajout d'un contact_message avec contact_form comme bundle.

Voir ContactController::contactSitePage() (EDIT: API docs ) comme exemple:

$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());

EDIT (merci @nilsun): Notez que entityManager est déconseillé au profit de entityTypeManager.

6
Berdir