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


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.