Sto scoprendo che il problema più grande nel lavorare con Drupal 8 è che non riesco a ottenere i dati di cui ho bisogno. Drupal 8 vuole che io usi metodi pubblici piuttosto che eseguire il drill down manuale di un oggetto. Il problema è che non riesco a capire un modo coerente per ottenere un elenco di metodi disponibili! (magicamente esistono, e mi sento come se dovessi conoscerli). =
Per questo esempio, supponiamo che io abbia un tipo di contenuto con un campo video. Devo ottenere l'URL non elaborato del file video in quel campo.
Quindi inizierei con un ID nodo ($ nid) e in qualche modo devo capire come caricare il nodo. Questo non è poi così male perché ci sono molti esempi. Quindi faccio qualcosa del genere $node = \Drupal\node\Entity\Node::load($nid);
.
Fin qui tutto bene. Quindi ho bisogno di ottenere il valore del mio campo video (field_main_video). Questo mi ha portato PER SEMPRE a capire perché c'è documentazione contrastante in giro per la rete. Alla fine ho capito che avrei dovuto fare qualcosa del genere (perché è un oggetto multivalore):
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... poi passa in rassegna l'array, ecc. L'uso di kint non mi ha aiutato a trovarlo. Perché, ad esempio, se io kint($node)
e osservo i metodi, non vedo getValue () come un elemento lì. Ancora non terribile, perché c'erano abbastanza esempi in giro per capirlo.
Mentre approfondisco, ciò che non sapevo (questa è la parte importante) era che invece di ottenere l'ID entità del campo video, quindi caricare l'entità, quindi trovare il campo "uri" nell'entità, ecc. (Come Vorrei in D7): c'era un metodo che mi permetteva di ottenere l'URI tutto in questa stessa riga di codice!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
Ma come avrei potuto sapere che esisteva getFileUri ()? Mi è capitato di imbatterci in un post sul blog. Questo rende davvero più semplice l'ottenimento di un URI rispetto a D7 ... ma solo se si conosce (magicamente) quali metodi esistono per ciascun "livello" di un oggetto.
Alla fine, con questo esempio, chiedo: come trovare tutti i metodi pubblici per ogni livello di un oggetto in un modo che sia facile da leggere e capire? Si noti che sembra che ci dovrebbe essere un modo drupal-centrico (ad es. Modulo di sviluppo) di farlo piuttosto che cercare manualmente api.drupal.org o usare qualcosa di IDE specifico?