Score:1

รูปแบบอาร์กิวเมนต์ Drupal\terminal\Form\TerminalCliForm ไม่ใช่รูปแบบที่ถูกต้อง

ธง cl

ฉันได้อ่านคำถามอื่นๆ เกี่ยวกับข้อความแสดงข้อผิดพลาดเดียวกันแล้ว พวกเขาทั้งหมดดูเหมือนจะจบลงด้วยการพิมพ์ผิดหรือเส้นทางของไฟล์ ฉันไม่เชื่อว่าเป็นเช่นนั้นที่นี่ แต่เราจะดู ฉันมีอินสแตนซ์การทำงานของรหัสเดียวกันนอกเหนือจากชื่อ ซึ่งทำให้สับสนมากขึ้น

ฉันเปิดใช้งานโมดูลด้านล่าง เลือกวางบล็อก จากนั้นเมื่อฉันกดไปที่หน้า รับ:

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

       คืนฟอร์ม $;
     }
   }
vg flag
คุณได้คัดลอกวางชื่อไฟล์ (และตำแหน่ง) หรือพิมพ์หรือไม่ (ฉันพนันได้เลยว่ามีการพิมพ์ผิดในชื่อโฟลเดอร์หรือไฟล์ ;))
cl flag
web/modules/custom/terminal/src/Form/TerminalCliForm.php และ web/modules/custom/terminal/src/Plugin/Block/TerminalCliBlock.php วางจาก PhpStorm
Jaypan avatar
de flag
ไฟล์นี้: `/modules/custom/terminal/src/Form/TerminalCliForm` ควรมีนามสกุลไฟล์ `.php` เพิ่มเข้าไป
cl flag
ทั้งคู่มีนามสกุล .php ดังที่แปะไว้ด้านบนจาก PhpStorm
cn flag
ดูเหมือนว่า PHP ไม่พบคลาส (`class_exists()` ล้มเหลวใน `FormBuilder::getFormId()`) หากชื่อไฟล์ถูกต้องแน่นอน ให้ลองรีสตาร์ทเว็บเซิร์ฟเวอร์/บริการ PHP - บางครั้ง APC อาจสับสนและจำเป็นต้องรีเซ็ต
cl flag
นั่นมัน @Clive การล้างแคช ไม่ใช่ แต่การหยุดและรีสตาร์ท Docksal ใช่! กรุณาโพสต์เป็นคำตอบ

โพสต์คำตอบ

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