Obtenga un formulario mediante programación en Drupal 8

12

La documentación dice:

El argumento pasado al método getForm () es el nombre de la clase que define su formulario y es una implementación de \ Drupal \ Core \ Form \ FormBuilderInterface.

¿Cómo puedo averiguar el nombre de la clase que define el formulario de comentarios del sitio web proporcionado por el módulo de contacto principal (la identificación del formulario es:) feedback_contact_message_form?

Cuando llego dpm()al formulario puedo ver que hay una clase definida:

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

Intenté varias formas de esto como el parámetro a pasar:

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

Pero sin suerte. Gracias

dbj44
fuente
1
Los formularios de contacto son entidades, así que me imagino que todos provienen Drupal\contact\ContactFormEditForm. Sin embargo, no estoy seguro de que haya una manera fácil de averiguarlo a menos que sepa que es un formulario de entidad. La mejor manera podría ser buscar en la srccarpeta del módulo archivos cuyo nombre termine con Form.php. Creo que es una convención segura a seguir
Clive
¿No ayudaría la respuesta de Berdir en mi pregunta? drupal.stackexchange.com/questions/146617/…
alexej_d
Gracias, pero no sigo la respuesta de Berdir. He agregado mi complemento de bloque debajo de mi respuesta, agregando las dos primeras líneas de su código de muestra. ¿A donde voy desde aqui? Gracias.
dbj44

Respuestas:

13

Esto se representa dentro de un complemento de bloque:

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
fuente
Estoy teniendo el mismo problema ¿podemos compartir notas y chatear? Todo lo que quiero hacer es tomar un formulario desde algún lugar del sitio y enviarlo a otro lugar dentro de un campo de texto habilitado para PHP.
Patoshi パ ト シ
¿Cómo puedo enviar este formulario de entidad mediante programación?
Unnikrishnan
si el formulario necesita actuar en #after_build, para la operación ajax, ¿tenemos alguna solución?
allabakash.g