Я прочитал другие вопросы, касающиеся того же сообщения об ошибке. Все они, кажется, в конечном итоге из-за опечаток или пути к файлу. Не думаю, что это так, но посмотрим. У меня есть рабочий экземпляр того же кода, если не считать имен, что еще больше сбивает с толку.
Я включаю модуль ниже. Выберите место своего блока. И затем, когда я попадаю на страницу, получаю:
InvalidArgumentException: Аргумент формы Drupal\terminal\Form\TerminalCliForm не является допустимой формой. в Drupal\Core\Form\FormBuilder->getFormId() (строка 197 core/lib/Drupal/Core/Form/FormBuilder.php).
Я проверил, что getFormId получает пустой form_id. Я читал, что это сообщение об ошибке указывает не на плохую форму в этих конкретных случаях, а на то, что файл формы не может быть найден. Я не уверен, в чем здесь дело.
/модули/обычай/терминал/SRC/Форма/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']['библиотека'][] = 'терминал/терминал';
$ форма ['холст'] = [
'#тип' => 'текстовое поле',
];
$ форма ['командная строка'] = [
'#тип' => 'текстовое поле',
];
вернуть $ форму;
}
/**
* {@inheritdoc}
*/
общедоступная функция validateForm (массив и $ форма, FormStateInterface $ form_state) {
// Ничего такого.
}
/**
* {@inheritdoc}
*/
публичная функция submitForm (массив и $ форма, 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);
вернуть $ форму;
}
}