Programowo pobierz formularz w Drupal 8

12

W dokumentacji czytamy:

Argument przekazany do metody getForm () to nazwa klasy, która definiuje formularz i jest implementacją \ Drupal \ Core \ Form \ FormBuilderInterface.

Jak znaleźć nazwę klasy, która definiuje formularz opinii o witrynie dostarczony przez główny moduł kontaktowy (identyfikator formularza to:) feedback_contact_message_form.

Kiedy dpm()w formularzu widzę, że istnieje zdefiniowana klasa:

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

Próbowałem różnych form tego jako parametru, który należy przekazać:

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

ale bez powodzenia. Dzięki

dbj44
źródło
1
Formularze kontaktowe to byty, więc wyobrażam sobie, że wszystkie pochodzą Drupal\contact\ContactFormEditForm. Nie jestem pewien, czy istnieje prosty sposób, aby się tego dowiedzieć, chyba że wiesz, że jest to forma bytu. Najlepszym sposobem może być poszukiwanie w srcfolderze modułu plików, których nazwa kończy się na Form.php. Myślę, że jest to bezpieczna konwencja
Clive
Czy odpowiedź Berdira w moim pytaniu nie pomogłaby? drupal.stackexchange.com/questions/146617/…
alexej_d
Dzięki, ale nie podążam za odpowiedzią Berdira. Dodałem moją wtyczkę blokową poniżej mojej odpowiedzi - dodając pierwsze dwa wiersze z próbki kodu. Gdzie mogę się stąd udać? Dzięki.
dbj44

Odpowiedzi:

13

To renderuje w ramach wtyczki blokowej:

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
źródło
Mam ten sam problem. czy możemy udostępniać notatki i czatować? Wszystko, co chcę zrobić, to po prostu pobrać formularz z dowolnego miejsca na stronie i wydrukować go gdzie indziej w polu tekstowym z obsługą PHP.
Patoshi パ ト シ
Jak mogę przesłać formularz tego podmiotu programowo?
Unnikrishnan
jeśli formularz musi działać na #after_build, dla operacji ajax, czy mamy jakieś rozwiązanie?
allabakash.g