Score:-2

ฉันสามารถใช้สองแบบฟอร์มที่แตกต่างกันในโมดูลเดียวได้หรือไม่

ธง cn

ฉันเพิ่งเริ่มใช้ Drupal 8 และฉันสงสัยว่าฉันสามารถใช้สองฟอร์มที่อยู่ในโฟลเดอร์ Form (mymodule/src/Form/) ได้หรือไม่ ชื่อของฟอร์มของฉันคือ FormOne.php และ FormTwo.php

ฉันสามารถแสดงและใช้ FormOne.php ผ่านโมดูลทั้งหมดของฉันเท่านั้น

ฉันได้ค้นคว้าและไม่สามารถหาคำตอบได้

คุณช่วยฉันแสดงแบบฟอร์มที่สองได้ไหม

Score:2
ธง de

ได้ คุณสามารถกำหนดแบบฟอร์มได้มากเท่าที่คุณต้องการในโมดูล

หากคุณต้องการรวมสองฟอร์มไว้ในหน้าเดียว คุณสามารถทำได้โดยใช้ตัวสร้างฟอร์มในตัวควบคุมของคุณเพื่อเรียกทั้งสองฟอร์มและสร้างอาร์เรย์แสดงผล

แทนที่จะใช้ _รูปร่าง ในของคุณ *.routing.yml ไฟล์ คุณจะใช้แทน _คอนโทรลเลอร์และกำหนดการเรียกกลับของคอนโทรลเลอร์แทนการเรียกกลับของฟอร์ม ตัวควบคุมของคุณจะเป็นดังนี้:

คลาส ExampleController ขยาย Drupal\Core\Controller\ControllerBase {

  ตัวอย่างฟังก์ชันPageCallback() {
    // หมายเหตุ - คุณควรใช้การพึ่งพาการฉีดเพื่อฉีดบริการนี้ 
    // มากกว่าวิธีนี้
    $form_builder = \Drupal::service('form_builder');

    $ ผลตอบแทน [
      'form_a' => $form_builder->getForm('Drupal\[MODULE]\Form\FormA'),
      'form_b' => $form_builder->getForm('Drupal\[MODULE]\Form\FormB'),
    ];
  }
}
Jeirod avatar
cn flag
ขอบคุณสำหรับคำตอบของคุณ @Jaypan ฉันถามคำถามนี้เพราะฉันสังเกตเห็นว่า FormOne สามารถใช้และแสดงผลได้เท่านั้น ดูเหมือนว่าฉันไม่สามารถใช้และแสดง FormTwo ได้ ฉันควรประกาศแต่ละแบบฟอร์มใน routing.yml หรือไม่
Jaypan avatar
de flag
หากคุณต้องการให้แบบฟอร์มสามารถเข้าถึงได้ที่เส้นทาง ใช่ นั่นเป็นวิธีหนึ่งที่คุณสามารถใช้แบบฟอร์มที่สองได้
Jeirod avatar
cn flag
เป็นไปได้ไหมที่จะเพิ่มทั้งสองเส้นทางใน routing.yml `mymodule.display_form:` ` เส้นทาง: '/mymodule'` ` ค่าเริ่มต้น: ' ` _form: '\Drupal\mymodule\Form\FormOne'` ` _form: '\Drupal\mymodule\Form\FormTwo'`
Kevin avatar
in flag
คุณต้องสร้างคอนโทรลเลอร์ที่ส่งคืนอาร์เรย์เรนเดอร์ที่มีทั้งสองรูปแบบในกรณีนั้น
Jaypan avatar
de flag
I've updated my answer.
Jeirod avatar
cn flag
@Jaypan, thanks for the update. I am planning to use each form in a separate page. Is it also possible?
Jaypan avatar
de flag
Yes, in that case you would use the method Razeem has posted as an answer. His answer is how to have separate pages for each form. My answer is how to have two forms on one page.
Jeirod avatar
cn flag
Thank you for the solution. @Jaypan
Jaypan avatar
de flag
You should mark his answer as correct, but give both of us an upvote for our answers. That's the custom here :) Welcome.
Jeirod avatar
cn flag
Sure @Jaypan, both answers are helpful. Thank you so much.
Jeirod avatar
cn flag
ขอบคุณ @Kevin สำหรับข้อมูลเพิ่มเติม
Score:2
ธง ru

คุณสามารถสร้างแบบฟอร์มแบบกำหนดเองได้ใน MyCustomForma.php

<?php

เนมสเปซ Drupal\MY_MODULE\Form;

ใช้ Drupal\Core\Form\FormBase;
ใช้ Drupal\Core\Form\FormStateInterface;

/**
 * คลาส MyCustomFormA
 */
คลาส MyCustomFormA ขยาย FormBase {

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะ getFormId () {
    ส่งคืน 'my_custom_form_a';
  }
.....
}

เช่นเดียวกับที่คุณสามารถสร้างแบบฟอร์มอื่นใน MyCustomFormB.php

<?php

เนมสเปซ Drupal\MY_MODULE\Form;

ใช้ Drupal\Core\Form\FormBase;
ใช้ Drupal\Core\Form\FormStateInterface;

/**
 * คลาส MyCustomFormB
 */
คลาส MyCustomFormB ขยาย FormBase {

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะ getFormId () {
    ส่งคืน 'my_custom_form_b';
  }
....
}

ในของคุณ MY_MODULE.routing.yml

MY_MODULE.my_custom_form_a:
  เส้นทาง: '/MY_MODULE/my_custom_form_a'
  ค่าเริ่มต้น:
    _form: '\Drupal\MY_MODULE\Form\MyCustomFormA'
    _title: 'แบบฟอร์ม A แบบกำหนดเองของฉัน'
  ความต้องการ:
    _permission: 'เข้าถึงเนื้อหา'
MY_MODULE.my_custom_form_b:
  เส้นทาง: '/MY_MODULE/my_custom_form_b'
  ค่าเริ่มต้น:
    _form: '\Drupal\MY_MODULE\Form\MyCustomFormB'
    _title: 'แบบฟอร์ม B แบบกำหนดเองของฉัน'

  ความต้องการ:
    _permission: 'เข้าถึงเนื้อหา'
Jeirod avatar
cn flag
ขอบคุณสำหรับการตอบกลับของคุณ @Razeem สำหรับ `MyCustomFormB.php` ฉันควรประกาศใน routing.yml ด้วยหรือไม่
Razeem Ahmad avatar
ru flag
หากคุณต้องการแสดงในหน้าใดหน้าหนึ่งใช่
Jeirod avatar
cn flag
คุณต้องการ 'ข้อกำหนด' ในแต่ละแบบฟอร์มหรือไม่ มันทำให้ฉัน 'HTTP ERROR 500' ฉันยังพยายามล้างแคชและทำให้เกิดข้อผิดพลาดเดียวกัน
Razeem Ahmad avatar
ru flag
yes you may also add that
Jeirod avatar
cn flag
ขอบคุณมาก @Razeem
Razeem Ahmad avatar
ru flag
ยินดีต้อนรับ @JeirodAbogado

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา