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

8

Comment obtenir le formulaire de contact latéral (feedback) individuellement affiché 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);
alexej_d
la source
INFO: 1) le formulaire de contact latéral par défaut (feedback) est une entité (pas le formulaire de connexion). 2) entityManagerest déconseillé au profit de entityTypeManager( API docs )
nilsun
Je voudrais me référer à une nouvelle question D8 principale pour aider avec toutes les sous-questions comme celle-ci ici, causée par la question de base ouverte, bien documentée ici en détails: drupal.stackexchange.com/questions/197149/…
nilsun

Réponses:

6

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.

Berdir
la source
INFO: entityManagerest déconseillé en faveur de entityTypeManager( documentation API ) et certains liens manquent ici dans la réponse. Dans la réponse, il déclare: Voir ContactController::contactSitePage() comme exemple. Où est-ce? Est-ce une page doc sur Drupal.org? Est-ce une fonction de base? Comment implémenter cela dans une fonction de prétraitement puisque la question portait sur .theme? Les choses ont changé à la fin de l'année dernière et il y a des informations manquantes sur le noyau D8 final concernant ces questions dans la plupart des réponses.
nilsun
Je voudrais me référer à une nouvelle question D8 principale pour aider avec toutes les sous-questions comme celle-ci ici, causée par la question de base ouverte, bien documentée ici en détails: drupal.stackexchange.com/questions/197149/…
nilsun
String :: checkPlain est désormais SafeMarkup :: checkPlain
pcambra
1
@pcambra Merci, notez que n'importe qui peut mettre à jour les réponses, vous pouvez simplement réparer quelque chose comme ça vous-même.
Berdir