프로그래밍 방식으로 Drupal 8 양식 작성


12

설명서 에는 다음 이 명시되어 있습니다.

getForm () 메소드에 전달 된 인수는 양식을 정의하는 클래스의 이름이며 \ Drupal \ Core \ Form \ FormBuilderInterface의 구현입니다.

핵심 연락처 모듈 에서 제공 하는 웹 사이트 피드백 양식 을 정의하는 클래스 이름을 확인하려면 어떻게해야합니까 (양식 ID :) .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. 나는 그것이 지켜야 할 안전한 협약이라고 생각합니다
Clive

내 질문에 Berdir의 답변이 도움이되지 않습니까? drupal.stackexchange.com/questions/146617/…
alexej_d

고맙지 만 Berdir의 대답을 따르지 않습니다. 내 답변 아래에 블록 플러그인을 추가했습니다. 코드 샘플에서 처음 두 줄을 추가하십시오. 여기서 어디로 가나 요? 감사.
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;
  }
}

같은 문제가 있습니다. 메모를 공유하고 채팅 할 수 있습니까? 내가하고 싶은 것은 사이트의 somwhere에서 양식을 가져 와서 PHP가 활성화 된 텍스트 필드의 다른 곳에서 출력하는 것입니다.
Patoshi パ ト シ

이 엔티티 양식을 프로그래밍 방식으로 제출하려면 어떻게해야합니까?
Unnikrishnan

양식이 #after_build에서 작동 해야하는 경우 ajax 작업을 위해 솔루션이 있습니까?
allabakash.g
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.