Estou descobrindo que o maior problema ao trabalhar com o Drupal 8 é que não consigo obter os dados necessários. O Drupal 8 quer que eu use métodos públicos em vez de detalhar manualmente um objeto. O problema é que não consigo descobrir uma maneira consistente de obter uma lista dos métodos disponíveis! (eles existem magicamente, e eu sinto que devo saber sobre eles). =
Neste exemplo, digamos que eu tenha um tipo de conteúdo com um campo de vídeo. Preciso obter o URL bruto do arquivo de vídeo nesse campo.
Então, eu começaria com uma identificação de nó ($ nid) e, de alguma forma, tenho que descobrir como carregar o nó. Isso não é tão ruim, porque há muitos exemplos. Então eu faço algo parecido $node = \Drupal\node\Entity\Node::load($nid);
.
Por enquanto, tudo bem. Preciso obter o valor do meu campo de vídeo (field_main_video). Isso sempre me levou a descobrir, porque há documentação conflitante em torno da rede. Finalmente, descobri que teria que fazer algo assim (porque é um item de vários valores):
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... então percorrer o array etc. Usar o kint também não me ajudou a encontrar isso. Porque, por exemplo, se eu kint($node)
olhar em métodos, não vejo getValue () como um item lá. Ainda não é terrível, porque havia exemplos suficientes para descobrir isso.
À medida que vou mais fundo, porém, o que eu não sabia (essa é a parte importante) era que, em vez de obter o ID da entidade do campo de vídeo, carregar a entidade e encontrar o campo "uri" na entidade, etc. (como Gostaria em D7): Havia um método que me permite obter o URI nessa mesma linha de código!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
Mas como eu poderia saber que esse getFileUri () existia? Por acaso tropeçou em um post do blog. Isso realmente facilita a obtenção de um URI do que no D7 ... mas apenas se você souber (magicamente) quais métodos existem para cada 'nível' de um objeto.
No final, com este exemplo, pergunto: Como você encontra todos os métodos públicos para cada nível de um objeto de uma maneira fácil de ler e entender? Observe que parece que deve haver uma maneira centrada em drupal (isto é, módulo devel) de fazê-lo, em vez de pesquisar manualmente api.drupal.org ou usar algo específico do IDE?