Siga esta pregunta, pero no tengo suficiente reputación para pedir aclaraciones en un comentario.
Estoy portando un módulo contribuido a Drupal 8. El código sugerido en el CR y la publicación mencionados anteriormente no funciona:
$node = $form_state->getFormObject()->getEntity();
Nada se carga en la variable $ node.
Mi IDE de PHPStorm da una advertencia para getEntity (): el método 'getEntity' no se encuentra en la clase Drupal \ Core \ Form \ FormInterface menos ... El método referenciado no se encuentra en la clase de materia.
Tampoco presenta este método para completar el código.
En la causa de uso, estoy haciendo referencia a:
use Drupal\Core\Entity;
use Drupal\Core\Entity\EntityInterface;
use Drupal\node\Entity\Node;
use Drupal\Core\Render\Element;
Aunque se eligió la respuesta correcta, creo que es necesario explicar algunas cosas:
getFormObject()
solo está disponible en formas de tipoEntityForm
.hook_form_node_form_alter()
, sabe que el formulario es siempre un formulario de nodo, por lo que está seguro de invocargetEntity()
el objeto del formulario.hook_form_alter()
enlace general , es posible que desee$form_id
verificar si es correcto o si el objeto del formulario es realmente unNodeForm
o unEntityForm
. Esto evitará errores de PHP si el formulario no es un formulario de entidad / nodo.$form_object
que está tratando es unNodeForm
o unEntityForm
. Esto hará que muestre pistas más apropiadas.fuente
Para que su IDE sepa cuál es el tipo de variable y qué está disponible para ello, debe escribir una pista sobre sus variables.
La sugerencia de tipo es el tipo de variable agregado antes del nombre de la variable del parámetro (en el ejemplo a continuación
array
yFormStateInterFace
).Ejemplo:
Para enviar enlaces, debe usar el
Drupal\Core\Form\FormStateInterface
tipo ... por lo tanto, en la parte superior del archivo, asegúrese de usar esa claseuse Drupal\Core\Form\FormStateInterface;
.Los estándares de codificación de Drupal establecen que debe escribir cast y explicar el tipo en el docblock. El esfuerzo extra ayuda en el futuro. ;)
fuente