Програмно отримати форму в 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();

але не везіння Дякую


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

У мене те саме питання. Чи можемо ми ділитися нотами та спілкуватися в чаті? Все, що я хочу зробити, - це просто взяти форму звідкись на сайті та вивести її десь у текстовому полі з підтримкою PHP.
Патоші パ ト シ

Як я можу подати форму цієї форми програмно?
Unnikrishnan

якщо форма потрібна для #after_build, для операції ajax, чи є у нас рішення?
allabakash.g
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.