Программно получить форму в Drupal 8

12

В документации говорится:

Аргумент, передаваемый методу getForm (), является именем класса, который определяет вашу форму, и является реализацией \ Drupal \ Core \ Form \ FormBuilderInterface.

Как мне узнать имя класса, который определяет форму обратной связи веб-сайта, предоставляемую модулем основного контакта (идентификатор формы:) feedback_contact_message_form.

Когда я dpm()в форме, я вижу, что есть определенный класс:

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

Я пробовал различные формы этого в качестве параметра для передачи:

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

но не повезло. Благодарность

dbj44
источник
1
Контактные формы являются сущностями, так что я думаю, что они все пришли Drupal\contact\ContactFormEditForm. Не уверен, что есть простой способ выяснить это, если вы не знаете, что это форма сущности. Наилучшим способом может быть поиск в srcпапке модуля файлов, имя которых заканчивается на Form.php. Я думаю, что это безопасное соглашение
Клайв
Разве ответ Бердира на мой вопрос не поможет? drupal.stackexchange.com/questions/146617/…
alexej_d
Спасибо, но я не слежу за ответом Бердира. Я добавил свой блочный плагин ниже моего ответа - добавив первые две строки из вашего примера кода. Куда мне идти отсюда? Благодарю.
dbj44

Ответы:

13

Это рендеринг в плагине блока:

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
источник
У меня та же проблема. мы можем делиться заметками и общаться? Все, что я хочу сделать, это просто взять форму из какого-то места на сайте и вывести ее где-нибудь еще в текстовом поле с поддержкой PHP.
Патоши シ ト シ
Как я могу отправить эту форму лица программно?
Унникришнан
если форма должна действовать на #after_build, для операции ajax, у нас есть какое-нибудь решение?
allabakash.g