Điểm:1

Đối số biểu mẫu Drupal\terminal\Form\TerminalCliForm không phải là biểu mẫu hợp lệ

lá cờ cl

Tôi đã đọc qua các câu hỏi khác liên quan đến thông báo lỗi tương tự. Tất cả chúng dường như kết thúc là do lỗi chính tả hoặc đường dẫn tệp. Tôi không tin đó là trường hợp ở đây, nhưng chúng ta sẽ thấy. Tôi có một phiên bản đang hoạt động của cùng một mã ngoài các tên, điều này càng khó hiểu hơn.

Tôi kích hoạt mô-đun bên dưới. Chọn nơi khối của nó. Và sau đó khi tôi truy cập trang, nhận được:

UnlimitedArgumentException: Đối số biểu mẫu Drupal\terminal\Form\TerminalCliForm không phải là biểu mẫu hợp lệ. trong Drupal\Core\Form\FormBuilder->getFormId() (dòng 197 của core/lib/Drupal/Core/Form/FormBuilder.php).

Tôi đã xác minh rằng getFormId nhận được form_id trống. Tôi đã đọc được rằng thông báo lỗi này biểu thị không phải biểu mẫu xấu trong những trường hợp cụ thể đó mà là một tệp biểu mẫu không thể tìm thấy. Tôi không chắc đó là trường hợp, ở đây.

/mô-đun/tùy chỉnh/thiết bị đầu cuối/src/Biểu mẫu/TerminalCliForm

không gian tên Drupal\terminal\Form;

sử dụng Drupal\Core\Form\FormBase;
sử dụng Drupal\Core\Form\FormStateInterface;

/**
 * Lớp TerminalCliForm.
*/
lớp TerminalCliForm mở rộng FormBase {

  /**
   * {@inheritdoc}
  */
  hàm công khai getFormId() {
    trả về 'terminal_cli_form';
  }

  /**
   * {@inheritdoc}
  */
  chức năng công khai buildForm(mảng $form, FormStateInterface $form_state) {
    $form['#attached']['library'][] = 'thiết bị đầu cuối/thiết bị đầu cuối';
    $form['canvas'] = [
      '#type' => 'vùng văn bản',
    ];
    $form['dòng lệnh'] = [
      '#type' => 'trường văn bản',
    ];
    trả về biểu mẫu $;
  }

  /**
   * {@inheritdoc}
  */
  hàm công khai validateForm(mảng &$form, FormStateInterface $form_state) {
    // Không.
  }

  /**
   * {@inheritdoc}
  */
  hàm công khai submitForm(mảng &$form, FormStateInterface $form_state) {
  }

}

/modules/custom/terminal/src/Plugin/Block/TerminalCliBlock - Tôi đã thử điều này có và không có câu lệnh sử dụng cho lớp biểu mẫu. Trong mô-đun khác hoạt động chính xác, nó hiện diện.

    không gian tên Drupal\terminal\Plugin\Block;

    sử dụng Drupal\Core\Block\BlockBase;
    sử dụng Drupal\terminal\Form\TerminalCliForm;

    /**
     * Cung cấp khối 'CliBlock'.
     *
     * @Chặn(
     * id = "terminal_cli_block",
     * admin_label = @Translation("khối CLI"),
     * danh mục = @Translation("Khối động cơ")
     * )
    */

    lớp TerminalCliBlock mở rộng BlockBase {

     /**
      * {@inheritdoc}
     */
     xây dựng chức năng công cộng () {

       $form = \Drupal::formBuilder()->getForm(TerminalCliForm::class);

       trả về biểu mẫu $;
     }
   }
lá cờ vg
Bạn đã sao chép, dán tên tệp (và vị trí) hoặc nhập nó chưa? (Tôi cá là có lỗi đánh máy trong tên thư mục hoặc tệp;))
lá cờ cl
web/modules/custom/terminal/src/Form/TerminalCliForm.php và web/modules/custom/terminal/src/Plugin/Block/TerminalCliBlock.php được dán từ PhpStorm.
Jaypan avatar
lá cờ de
Tệp này: `/modules/custom/terminal/src/Form/TerminalCliForm` nên có phần mở rộng tệp `.php` được thêm vào.
lá cờ cl
Cả hai đều có phần mở rộng .php, như đã dán ở trên từ PhpStorm
lá cờ cn
Có vẻ như PHP không thể tìm thấy lớp (`class_exists()` không thành công trong `FormBuilder::getFormId()`). Nếu tên tệp chắc chắn là chính xác, hãy thử khởi động lại máy chủ web/dịch vụ PHP - APC đôi khi có thể bị nhầm lẫn và cần thiết lập lại
lá cờ cl
Điều đó đã làm được @Clive. Xóa bộ nhớ cache thì không, nhưng dừng và khởi động lại docksal thì có! Xin vui lòng gửi nó như là một câu trả lời.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.