Obter programaticamente um formulário no Drupal 8


12

A documentação declara:

O argumento passado para o método getForm () é o nome da classe que define seu formulário e é uma implementação de \ Drupal \ Core \ Form \ FormBuilderInterface.

Como descubro o nome da classe que define o formulário de feedback do site fornecido pelo módulo de contato principal (o ID do formulário é:) feedback_contact_message_form.

Quando eu dpm()forma, vejo que há uma classe 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"

Eu tentei várias formas disso como o parâmetro para passar para:

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

mas sem sorte. obrigado


1
Os formulários de contato são entidades, então eu imagino que todos eles vêm Drupal\contact\ContactFormEditForm. Não sei se há uma maneira fácil de descobrir isso, a menos que você saiba que é um formulário de entidade. A melhor maneira é procurar na srcpasta do módulo arquivos cujo nome termina com Form.php. Eu acho que é uma convenção segura a seguir
Clive

A resposta de Berdir na minha pergunta não ajudaria? drupal.stackexchange.com/questions/146617/…
alexej_d

Obrigado, mas não sigo a resposta de Berdir. Adicionei meu plug-in de bloco abaixo da minha resposta - adicionando as duas primeiras linhas do seu exemplo de código. Para onde eu vou daqui? Obrigado.
24ma13wg

Respostas:


13

Isso renderiza dentro de um plug-in de bloco:

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

Estou tendo o mesmo problema. podemos compartilhar anotações e conversar? Tudo o que eu quero fazer é pegar um formulário de algum lugar do site e enviá-lo para outro lugar dentro de um campo de texto habilitado para PHP.
Patoshiパトシ

Como posso enviar este formulário de entidade programaticamente?
Unnikrishnan

se o formulário precisar atuar em #after_build, para operação do ajax, temos alguma solução?
allabakash.g
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.