Puncte:1

Argumentul de formă Drupal\terminal\Form\TerminalCliForm nu este un formular valid

drapel cl

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;
     }
   }
drapel vg
Ați copiat și lipit numele fișierelor (și locația) sau le-ați tastat? (Pariez că există o greșeală de scriere în folderul sau numele fișierelor ;))
drapel cl
web/modules/custom/terminal/src/Form/TerminalCliForm.php și web/modules/custom/terminal/src/Plugin/Block/TerminalCliBlock.php lipite din PhpStorm.
Jaypan avatar
drapel de
Acest fișier: `/modules/custom/terminal/src/Form/TerminalCliForm` ar trebui să aibă extensia de fișier `.php` adăugată.
drapel cl
Ambele au o extensie .php, așa cum a fost lipită mai sus din PhpStorm
drapel cn
Se pare că PHP nu poate găsi clasa (`class_exists()` eșuează în `FormBuilder::getFormId()`). Dacă numele fișierelor sunt cu siguranță corecte, încercați să reporniți serverul web/serviciul PHP - APC poate deveni confuz uneori și are nevoie de o resetare
drapel cl
Asta a făcut @Clive. Golirea memoriei cache, nu, dar oprirea și repornirea docksal, da! Vă rog să îl postați ca răspuns.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.