Suivi de cette question mais je n'ai pas assez de réputation pour demander des éclaircissements dans un commentaire.
Je porte un module contribué à Drupal 8. Le code suggéré sur le CR et le message mentionnés ci-dessus ne fonctionne pas:
$node = $form_state->getFormObject()->getEntity();
Rien n'est chargé dans la variable $ node.
Mon IDE PHPStorm donne un avertissement pour getEntity (): Méthode 'getEntity' introuvable dans la classe Drupal \ Core \ Form \ FormInterface less ... La méthode référencée n'est pas trouvée dans la classe sujet.
Il ne présente pas non plus cette méthode pour l'achèvement du code.
Dans la cause d'utilisation dont je parle:
use Drupal\Core\Entity;
use Drupal\Core\Entity\EntityInterface;
use Drupal\node\Entity\Node;
use Drupal\Core\Render\Element;
Bien que la bonne réponse ait été choisie, je pense qu'il est nécessaire d'expliquer certaines choses:
getFormObject()
n'est disponible que sur les formulaires de typeEntityForm
.hook_form_node_form_alter()
, vous savez que le formulaire est toujours un formulaire de nœud, vous pouvez donc appeler en toute sécuritégetEntity()
l'objet de formulaire.hook_form_alter()
hook général , vous souhaiterez peut-être vérifier le bon$form_id
ou vérifier si l'objet de formulaire est réellement unNodeForm
ou unEntityForm
. Cela évitera les erreurs PHP si le formulaire n'est pas un formulaire d'entité / de nœud.$form_object
vous avez affaire à unNodeForm
ou à unEntityForm
. Cela lui fera afficher des astuces plus appropriées.la source
Pour que votre IDE sache quel est le type de variable et ce qui est disponible, vous devez taper hint vos variables.
L'indicateur de type est le type de variable ajouté avant le nom de la variable de paramètre (dans l'exemple ci
array
- dessous etFormStateInterFace
).Exemple:
Pour soumettre des hooks, vous devez utiliser le
Drupal\Core\Form\FormStateInterface
type ... donc en haut du fichier assurez-vous d'utiliser cette classeuse Drupal\Core\Form\FormStateInterface;
.Les normes de codage Drupal stipulent que vous devez taper cast et expliquer le type dans le docblock. L'effort supplémentaire aide à l'avenir. ;)
la source