Programlı olarak Drupal 8'de bir form alın


12

Dokümantasyon durumları:

GetForm () yöntemine iletilen bağımsız değişken, formunuzu tanımlayan sınıfın adıdır ve \ Drupal \ Core \ Form \ FormBuilderInterface öğesinin bir uygulamasıdır.

Çekirdek iletişim modülü tarafından sağlanan web sitesi geri bildirim formunu tanımlayan sınıfın adını nasıl bulabilirim (form id:) .feedback_contact_message_form

Ne zaman dpm()form tanımlanmış bir sınıf olduğunu görebilirsiniz:

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

Ben geçmek için parametre olarak bunun çeşitli formları denedim:

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

ama şans yok. Teşekkürler


1
İletişim formları varlıklardır, bu yüzden hepsinin geldiğini hayal ediyorum Drupal\contact\ContactFormEditForm. Bir varlık formu olduğunu bilmedikçe bunu öğrenmenin kolay bir yolu olduğundan emin değilim. En iyi yol src, adı ile biten dosyaları modül modülünün altına bakmak olabilir Form.php. Bu takip edilmesi güvenli bir kongre olduğunu düşünüyorum
Clive

Berdir'in sorumdaki cevabı yardımcı olmaz mı? drupal.stackexchange.com/questions/146617/…
alexej_d

Teşekkürler, ama Berdir'in cevabını takip etmiyorum. Blok eklentimi cevabımın altına ekledim - kod örneğinizden ilk iki satırı ekledim. Buradan nereye giderim? Teşekkürler.
dbj44

Yanıtlar:


13

Bu, bir blok eklentisi içinde görüntülenir:

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

Aynı sorunu yaşıyorum. not paylaşabilir ve sohbet edebilir miyiz? Tüm yapmak istediğim sadece sitenin herhangi bir yerinden bir form almak ve bir PHP etkin metin alanı içinde başka bir yerde çıktı.
Patoshi パ ト シ

Bu varlık formunu programlı olarak nasıl gönderebilirim?
Unnikrishnan

form #after_build üzerinde işlem yapmak istiyorsa, ajax işlemi için herhangi bir çözümümüz var mı?
allabakash.g
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.