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 $;
}
}