ฉันได้อ่านคำถามอื่นๆ เกี่ยวกับข้อความแสดงข้อผิดพลาดเดียวกันแล้ว พวกเขาทั้งหมดดูเหมือนจะจบลงด้วยการพิมพ์ผิดหรือเส้นทางของไฟล์ ฉันไม่เชื่อว่าเป็นเช่นนั้นที่นี่ แต่เราจะดู ฉันมีอินสแตนซ์การทำงานของรหัสเดียวกันนอกเหนือจากชื่อ ซึ่งทำให้สับสนมากขึ้น
ฉันเปิดใช้งานโมดูลด้านล่าง เลือกวางบล็อก จากนั้นเมื่อฉันกดไปที่หน้า รับ:
InvalidArgumentException: รูปแบบอาร์กิวเมนต์ Drupal\terminal\Form\TerminalCliForm ไม่ใช่รูปแบบที่ถูกต้อง ใน Drupal\Core\Form\FormBuilder->getFormId() (บรรทัดที่ 197 ของ core/lib/Drupal/Core/Form/FormBuilder.php)
ฉันได้ตรวจสอบแล้วว่า getFormId ได้รับ form_id ที่ว่างเปล่า ฉันได้อ่านแล้วว่าข้อความแสดงข้อผิดพลาดนี้ระบุว่าไม่ใช่แบบฟอร์มที่ไม่ถูกต้องในกรณีเฉพาะเหล่านั้น แต่เป็นไฟล์แบบฟอร์มที่ไม่พบ ฉันไม่แน่ใจว่าเป็นกรณีใดที่นี่
/modules/custom/terminal/src/Form/TerminalCliForm
เนมสเปซ Drupal\terminal\Form;
ใช้ Drupal\Core\Form\FormBase;
ใช้ Drupal\Core\Form\FormStateInterface;
/**
* คลาส TerminalCliForm
*/
คลาส TerminalCliForm ขยาย FormBase {
/**
* {@inheritdoc}
*/
ฟังก์ชั่นสาธารณะ getFormId () {
กลับ 'terminal_cli_form';
}
/**
* {@inheritdoc}
*/
ฟังก์ชันสาธารณะ buildForm (อาร์เรย์ $form, FormStateInterface $form_state) {
$form['#attached']['library'][] = 'เทอร์มินัล/เทอร์มินัล';
$แบบฟอร์ม['ผ้าใบ'] = [
'#type' => 'textarea',
];
$แบบฟอร์ม['บรรทัดคำสั่ง'] = [
'#type' => 'ช่องข้อความ',
];
คืนฟอร์ม $;
}
/**
* {@inheritdoc}
*/
ฟังก์ชันสาธารณะ validateForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
// ไม่มีอะไร.
}
/**
* {@inheritdoc}
*/
ฟังก์ชันสาธารณะ submitForm (อาร์เรย์ &$form, FormStateInterface $form_state) {
}
}
/modules/custom/terminal/src/Plugin/Block/TerminalCliBlock - ฉันได้ลองสิ่งนี้โดยมีและไม่มีคำสั่งการใช้งานสำหรับคลาสแบบฟอร์ม ในโมดูลอื่นที่ทำงานได้อย่างถูกต้องมีอยู่
เนมสเปซ Drupal\terminal\Plugin\Block;
ใช้ Drupal\Core\Block\BlockBase;
ใช้ Drupal\terminal\Form\TerminalCliForm
/**
* ให้บล็อก 'CliBlock'
*
* @ปิดกั้น(
* id = "terminal_cli_block",
* admin_label = @Translation("บล็อก CLI"),
* หมวดหมู่ = @Translation("บล็อกเครื่องยนต์")
* )
*/
คลาส TerminalCliBlock ขยาย BlockBase {
/**
* {@inheritdoc}
*/
สร้างฟังก์ชั่นสาธารณะ () {
$form = \Drupal::formBuilder()->getForm(TerminalCliForm::class);
คืนฟอร์ม $;
}
}