Ottieni a livello di programmazione un modulo in Drupal 8


12

La documentazione afferma:

L'argomento passato al metodo getForm () è il nome della classe che definisce il modulo ed è un'implementazione di \ Drupal \ Core \ Form \ FormBuilderInterface.

Come faccio a scoprire il nome della classe che definisce il modulo di feedback del sito Web fornito dal modulo di contatto principale (l'id del modulo è:) feedback_contact_message_form.

Quando ho dpm()il modulo posso vedere che esiste una classe definita:

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

Ho provato varie forme di questo come parametro per passare a:

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

ma senza fortuna. Grazie


1
I moduli di contatto sono entità, quindi immagino che provengano tutti Drupal\contact\ContactFormEditForm. Non sono sicuro che ci sia un modo semplice per scoprirlo a meno che tu non sappia che è un modulo di entità. Il modo migliore potrebbe essere quello di cercare nella srccartella del modulo i file il cui nome termina Form.php. Penso che sia una convenzione sicura da seguire
— Clive

La risposta di Berdir nella mia domanda non sarebbe di aiuto? drupal.stackexchange.com/questions/146617/…
— alexej_d

Grazie, ma non seguo la risposta di Berdir. Ho aggiunto il mio plug-in di blocco sotto la mia risposta, aggiungendo le prime due righe dell'esempio di codice. Dove vado da qui? Grazie.
— dbj44,

Risposte:


13

Questo viene reso all'interno di un plug-in a blocchi:

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;
  }
}

Sto avendo lo stesso problema. possiamo condividere note e chattare? Tutto quello che voglio fare è semplicemente prendere un modulo da qualche parte sul sito e inviarlo da qualche altra parte all'interno di un campo di testo abilitato per PHP.
— Patoshi

Come posso presentare questo modulo di entità in modo programmatico?
— Unnikrishnan,

se il modulo deve agire su #after_build, per l'operazione ajax, abbiamo qualche soluzione?
— allabakash.g
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.