Drupal 8 ile çalışmanın en büyük probleminin ihtiyacım olan verileri elde edemiyorum. Drupal 8, bir nesneyi manuel olarak delmek yerine genel yöntemleri kullanmamı istiyor. Sorun şu ki, mevcut yöntemlerin bir listesini almak için tutarlı bir yol bulamıyorum! (sihirli bir şekilde var olurlar ve sadece onlar hakkında bilgi sahibi olmam gerektiğini hissediyorum). =
Bu örnekte, video alanına sahip bir içerik türüm olduğunu varsayalım. Bu alanda video dosyasının ham URL'sini almam gerekiyor.
Bu yüzden bir düğüm kimliği ($ nid) ile başlayacağım ve bir şekilde düğümü nasıl yükleyeceğimi bulmalıyım. Bu çok kötü değil çünkü birçok örnek var. Ben de böyle bir şey yapıyorum $node = \Drupal\node\Entity\Node::load($nid);
.
Çok uzak çok iyi. Sonra benim video alanı (field_main_video) değerini almak gerekir. Bu beni net olarak anladım çünkü 'net'in etrafında çelişen belgeler var. Sonunda ben böyle bir şey yapmak zorunda anladım (çünkü çok değerli bir öğe):
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... sonra dizi vb döngü. Çünkü, örneğin, ben kint($node)
ve yöntemlerin altına bakarsanız, getValue () öğesini orada bir öğe olarak görmüyorum. Hala korkunç değil, çünkü anlamaya yetecek kadar örnek vardı.
Daha derine inerken, bilmediğim şey (bu önemli kısımdır) video alanı varlık kimliğini almak, sonra varlığı yüklemek, ardından varlıktaki "uri" alanını bulmaktan (vb.) Ben D7) olurdu: URI tüm bu aynı kod satırı almak sağlayan bir yöntem vardı!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
Ama bu getFileUri () 'nin var olduğunu nasıl bilebilirdim? Bir blog gönderisinde rastladım. Bu gerçekten bir URI'yi D7'den daha kolay hale getirir ... ancak sadece bir nesnenin her 'seviyesi' için hangi yöntemleri (sihirli bir şekilde) biliyorsanız.
Sonunda, bu örnekle soruyorum: Bir nesnenin her seviyesi için tüm genel yöntemleri, okunması ve anlaşılması kolay bir şekilde nasıl buluyorsunuz? Api.drupal.org'u manuel olarak aramak veya IDE'ye özgü bir şey kullanmak yerine bunu yapmanın bir drupal merkezli (yani devel modülü) bir yolu olması gerektiğini unutmayın.