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


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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.