Acompanhe esta pergunta, mas não tenho reputação suficiente para pedir esclarecimentos em um comentário.
Estou portando um módulo contribuído para o Drupal 8. O código sugerido no CR e na postagem acima mencionados não está funcionando:
$node = $form_state->getFormObject()->getEntity();
Nada é carregado na variável $ node.
Meu IDE PHPStorm emite um aviso para getEntity (): O método 'getEntity' não foi encontrado na classe Drupal \ Core \ Form \ FormInterface less ... O método referenciado não foi encontrado na classe de assunto.
Também não está apresentando esse método para conclusão de código.
Na causa de uso, estou referenciando:
use Drupal\Core\Entity;
use Drupal\Core\Entity\EntityInterface;
use Drupal\node\Entity\Node;
use Drupal\Core\Render\Element;
Embora a resposta correta tenha sido escolhida, sinto que há necessidade de explicar algumas coisas:
getFormObject()
está disponível apenas em formulários do tipoEntityForm
.hook_form_node_form_alter()
, sabe que o formulário é sempre um nó, portanto você está seguro chamandogetEntity()
o objeto de formulário.hook_form_alter()
gancho geral , convém verificar o correto$form_id
ou se o objeto do formulário é realmente umNodeForm
ou umEntityForm
. Isso evitará erros de PHP se o formulário não for um formulário de entidade / nó.$form_object
você está lidando com umNodeForm
ou umEntityForm
. Isso fará com que ele mostre dicas mais apropriadas.fonte
Para que seu IDE saiba qual é o tipo de variável e o que está disponível, é necessário digitar dicas de suas variáveis.
A dica de tipo é o tipo de variável adicionado antes do nome da variável de parâmetro (no exemplo abaixo
array
eFormStateInterFace
).Exemplo:
Para enviar ganchos, você deve usar o
Drupal\Core\Form\FormStateInterface
tipo ... portanto, na parte superior do arquivo, certifique-se de usar essa classeuse Drupal\Core\Form\FormStateInterface;
.Os padrões de codificação do Drupal afirmam que você deve digitar cast e explicar o tipo no docblock. O esforço extra ajuda no futuro. ;)
fonte