Am citit și alte întrebări referitoare la același mesaj de eroare. Toate par să se datoreze greșelilor de tipar sau căii fișierului. Nu cred că este cazul aici, dar vom vedea. Am o instanță de lucru a aceluiași cod în afară de nume, ceea ce este cu atât mai confuz.
Activez modulul de mai jos. Selectați plasați blocul acestuia. Și atunci când lovesc pagina, primesc:
InvalidArgumentException: Argumentul de formular Drupal\terminal\Form\TerminalCliForm nu este un formular valid. în Drupal\Core\Form\FormBuilder->getFormId() (linia 197 din core/lib/Drupal/Core/Form/FormBuilder.php).
Am verificat că getFormId primește un form_id gol. Am citit că acest mesaj de eroare indică nu o formă proastă în acele cazuri specifice, ci un fișier formular care nu poate fi găsit. Nu sunt sigur care este cazul, aici.
/modules/custom/terminal/src/Form/TerminalCliForm
spațiu de nume Drupal\terminal\Form;
utilizați Drupal\Core\Form\FormBase;
utilizați Drupal\Core\Form\FormStateInterface;
/**
* Clasa TerminalCliForm.
*/
clasa TerminalCliForm extinde FormBase {
/**
* {@inheritdoc}
*/
funcția publică getFormId() {
returnează „terminal_cli_form”;
}
/**
* {@inheritdoc}
*/
funcția publică buildForm(array $form, FormStateInterface $form_state) {
$form['#attached']['library'][] = 'terminal/terminal';
$form['canvas'] = [
'#type' => 'textarea',
];
$form['comandă'] = [
'#type' => 'câmp de text',
];
returnează $form;
}
/**
* {@inheritdoc}
*/
funcția publică validateForm(matrice &$form, FormStateInterface $form_state) {
// Nimic.
}
/**
* {@inheritdoc}
*/
funcția publică submitForm(matrice &$form, FormStateInterface $form_state) {
}
}
/modules/custom/terminal/src/Plugin/Block/TerminalCliBlock - Am încercat acest lucru cu și fără instrucțiunea de utilizare pentru clasa formular. În celălalt modul care funcționează corect, este prezent.
spațiu de nume Drupal\terminal\Plugin\Block;
utilizați Drupal\Core\Block\BlockBase;
utilizați Drupal\terminal\Form\TerminalCliForm;
/**
* Oferă un bloc „CliBlock”.
*
* @Bloc(
* id = "terminal_cli_block",
* admin_label = @Translation ("bloc CLI"),
* categorie = @Translation(„Bloc motor”)
* )
*/
clasa TerminalCliBlock extinde BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
$form = \Drupal::formBuilder()->getForm(TerminalCliForm::class);
returnează $form;
}
}