Obtenir par programme un formulaire dans Drupal 8

12

La documentation indique:

L'argument passé à la méthode getForm () est le nom de la classe qui définit votre formulaire et est une implémentation de \ Drupal \ Core \ Form \ FormBuilderInterface.

Comment puis-je trouver le nom de la classe qui définit le formulaire de rétroaction du site Web fourni par le module de contact principal (l'ID du formulaire est:) feedback_contact_message_form.

Quand je dpm()forme, je peux voir qu'il y a une classe définie:

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

J'ai essayé différentes formes de ceci comme paramètre à passer à:

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

mais pas de chance. Merci

dbj44
la source
1
Les formulaires de contact sont des entités, donc j'imagine qu'ils proviennent tous Drupal\contact\ContactFormEditForm. Je ne suis pas sûr qu'il existe un moyen facile de le savoir, sauf si vous savez que c'est une forme d'entité. La meilleure façon pourrait être de rechercher dans le srcdossier du module les fichiers dont le nom se termine par Form.php. Je pense que c'est une convention sûre à suivre
Clive
La réponse de Berdir dans ma question ne serait-elle pas utile? drupal.stackexchange.com/questions/146617/…
alexej_d
Merci, mais je ne suis pas la réponse de Berdir. J'ai ajouté mon plugin de bloc sous ma réponse - en ajoutant les deux premières lignes de votre exemple de code. Où dois-je aller d'ici? Merci.
dbj44

Réponses:

13

Cela se traduit dans un plugin de bloc:

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;
  }
}
dbj44
la source
J'ai le même problème. pouvons-nous partager des notes et discuter? Tout ce que je veux faire, c'est simplement prendre un formulaire de quelque part sur le site et le sortir ailleurs dans un champ de texte compatible PHP.
Patoshi パ ト シ
Comment puis-je envoyer ce formulaire d'entité par programme?
Unnikrishnan
si le formulaire doit agir sur #after_build, pour le fonctionnement ajax, avons-nous une solution?
allabakash.g