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.