Como processar programaticamente um formulário de contato em um tema no D8

8

Como obter o formulário de contato lateral (feedback) individualmente exibido em um bloco personalizado ou em outra página / contato (por exemplo, página inicial)?

Eu tentei esse código, mas ele não está funcionando (são entidades de formulários de contato?):

// get default form
// get the entity object
$default_form = \Drupal::config('contact.settings')->get('default_form');
$entity = \Drupal::entityManager()->getStorage('contact_form')->load($default_form);

// get view builder
// render view
$view_builder = \Drupal::entityManager()->getViewBuilder('contact_form');
$full_output = $view_builder->view($entity);
alexej_d
fonte
INFO: 1) o formulário de contato lateral padrão (feedback) é uma entidade (não o formulário de login). 2) entityManageré substituído em favor da entityTypeManager( documentação de API )
nilsun
Gostaria de me referir a uma nova pergunta principal do D8 para ajudar com todas as questões secundárias como esta aqui, causadas pela pergunta básica aberta, bem documentada aqui em detalhes: drupal.stackexchange.com/questions/197149/…
nilsun

Respostas:

6

O formulário de contato é uma entidade, mas você não pode visualizá-lo.

O que você deseja é um formulário de adição de uma mensagem de contato com formulário de contato como pacote configurável.

Veja ContactController::contactSitePage()(EDIT: documentos da API ) como exemplo:

$message = \Drupal::entityTypeManager()
  ->getStorage('contact_message')
  ->create(array(
    'contact_form' => $contact_form->id(),
  ));

// This works in a controller, use \Drupal::service('entity.form_builder') elsewhere.
$form = $this->entityFormBuilder()->getForm($message);
$form['#title'] = SafeMarkup::checkPlain($contact_form->label());

EDIT (obrigado @nilsun): observe que entityManager está obsoleto em favor de entityTypeManager.

Berdir
fonte
INFO: entityManagerfoi preterido em favor de entityTypeManager( API docs ) e alguns links estão ausentes aqui na resposta. Na resposta, declara: Veja ContactController::contactSitePage() como exemplo. Cadê? É uma página de documento no Drupal.org? É uma função no núcleo? Como implementar isso em uma função de pré-processo, já que a pergunta era sobre tema. As coisas mudaram no final do ano passado e faltam informações sobre o núcleo final do D8 sobre essas questões na maioria das respostas.
nilsun
Gostaria de me referir a uma nova pergunta principal do D8 para ajudar com todas as questões secundárias como esta aqui, causadas pela pergunta básica aberta, bem documentada aqui em detalhes: drupal.stackexchange.com/questions/197149/…
nilsun
Cordas :: checkPlain é agora SafeMarkup :: checkPlain
pcambra
11
@pcambra Obrigado, observe que qualquer um pode atualizar as respostas, você pode consertar algo assim sozinho.
Berdir