Estoy descubriendo que el mayor problema al trabajar con Drupal 8 es que no puedo obtener los datos que necesito. Drupal 8 quiere que use métodos públicos en lugar de perforar manualmente a través de un objeto. ¡El problema es que no puedo encontrar una manera consistente de obtener una lista de los métodos disponibles! (existen mágicamente, y siento que se supone que debo saber sobre ellos). =
Para este ejemplo, supongamos que tengo un tipo de contenido con un campo de video. Necesito obtener la URL sin procesar del archivo de video en ese campo.
Entonces comenzaría con una identificación de nodo ($ nid), y de alguna manera tengo que descubrir cómo cargar el nodo. Esto no es tan malo porque hay muchos ejemplos. Así que hago algo así $node = \Drupal\node\Entity\Node::load($nid);
.
Hasta ahora tan bueno. Entonces necesito obtener el valor de mi campo de video (field_main_video). Esto me llevó SIEMPRE a descubrir porque hay documentación contradictoria en la red. Finalmente descubrí que tendría que hacer algo como esto (porque es un elemento de varios valores):
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... luego recorre la matriz, etc. Usar kint tampoco me ayudó a encontrar esto. Porque, por ejemplo, si yo kint($node)
y miro bajo métodos, no veo getValue () como un elemento allí. Todavía no es terrible, porque había suficientes ejemplos para resolverlo.
Sin embargo, a medida que profundizo, lo que no sabía (esta es la parte importante) fue que en lugar de obtener la identificación de la entidad del campo de video, luego cargar la entidad, luego encontrar el campo "uri" en la entidad, etc. (como Lo haría en D7): ¡había un método que me permitía obtener el URI todo en esta misma línea de código!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
Pero, ¿cómo podría haber sabido que existía getFileUri ()? Me topé con él en una publicación de blog. Esto realmente hace que obtener un URI sea más fácil que en D7 ... pero solo si sabes (mágicamente) qué métodos existen para cada 'nivel' de un objeto.
Al final, con este ejemplo, pregunto: ¿Cómo encuentra todos los métodos públicos para cada nivel de un objeto de una manera fácil de leer y entender? Tenga en cuenta que parece que debería haber una forma centrada en drupal (es decir, módulo de desarrollo) de hacer esto en lugar de buscar manualmente api.drupal.org o usar algo IDE específico.