Befolgen Sie diese Frage, aber ich habe nicht genug Ruf, um in einem Kommentar Klarheit zu schaffen.
Ich portiere ein beigetragenes Modul auf Drupal 8. Der empfohlene Code für die oben genannte CR und den Post funktioniert nicht:
$node = $form_state->getFormObject()->getEntity();
In die $ node-Variable wird nichts geladen.
Meine PHPStorm-IDE gibt eine Warnung für getEntity () aus: Methode 'getEntity' nicht in Klasse gefunden Drupal \ Core \ Form \ FormInterface weniger ... Die referenzierte Methode wurde in der Subjektklasse nicht gefunden.
Diese Methode wird auch nicht für die Code-Vervollständigung vorgestellt.
In der Verwendungsursache beziehe ich mich auf:
use Drupal\Core\Entity;
use Drupal\Core\Entity\EntityInterface;
use Drupal\node\Entity\Node;
use Drupal\Core\Render\Element;
Obwohl die richtige Antwort gewählt wurde, muss meines Erachtens einiges erklärt werden:
getFormObject()
ist nur für Formulartypen verfügbarEntityForm
.hook_form_node_form_alter()
, wissen Sie, dass das Formular immer ein Knotenformular ist, sodass SiegetEntity()
das Formularobjekt sicher aufrufen können .hook_form_alter()
Hook ausführen, möchten Sie möglicherweise$form_id
überprüfen, ob das Formularobjekt tatsächlich einNodeForm
oder ein istEntityForm
. Dies verhindert PHP-Fehler, wenn das Formular kein Entity / Node-Formular ist.$form_object
es sich um einNodeForm
oder ein handeltEntityForm
. Dadurch werden geeignetere Hinweise angezeigt.quelle
Damit Ihre IDE weiß, was der Variablentyp ist und was ihm zur Verfügung steht, müssen Sie einen Hinweis auf Ihre Variablen eingeben.
Der Typhinweis ist der Variablentyp, der vor dem Namen der Parametervariable hinzugefügt wird (im folgenden Beispiel
array
undFormStateInterFace
).Beispiel:
Für Submit-Hooks sollten Sie den
Drupal\Core\Form\FormStateInterface
Typ ... verwenden. Stellen Sie daher oben in der Datei sicher, dass Sie diese Klasse verwendenuse Drupal\Core\Form\FormStateInterface;
.Drupal-Codierungsstandards besagen, dass Sie cast eingeben und den Typ im docblock erläutern sollten. Der Mehraufwand hilft in Zukunft. ;)
quelle