मुझे लग रहा है कि Drupal 8 के साथ काम करने में सबसे बड़ी समस्या यह है कि मुझे वह डेटा नहीं मिल सकता है जिसकी मुझे ज़रूरत है। Drupal 8 चाहता है कि मैं किसी ऑब्जेक्ट को मैन्युअल रूप से ड्रिलिंग करने के बजाय सार्वजनिक तरीकों का उपयोग करूं। समस्या यह है, मैं उपलब्ध तरीकों की सूची प्राप्त करने के लिए एक सुसंगत तरीके का पता नहीं लगा सकता! (वे जादुई रूप से मौजूद हैं, और मुझे लगता है कि मैं उनके बारे में जानने वाला हूं) =
इस उदाहरण के लिए, मान लें कि मेरे पास वीडियो फ़ील्ड के साथ एक सामग्री प्रकार है। मुझे उस फ़ील्ड में वीडियो फ़ाइल का कच्चा URL प्राप्त करने की आवश्यकता है।
इसलिए मैं एक नोड आईडी ($ nid) के साथ शुरू करूंगा, और किसी तरह मुझे यह पता लगाना होगा कि नोड कैसे लोड करना है। यह बहुत बुरा नहीं है क्योंकि इसके बहुत सारे उदाहरण हैं। इसलिए मैं कुछ ऐसा करता हूं $node = \Drupal\node\Entity\Node::load($nid);
।
अब तक सब ठीक है। फिर मुझे अपने वीडियो फ़ील्ड (फ़ील्ड_मैं_वीडियो) का मूल्य प्राप्त करने की आवश्यकता है। यह मुझे समझ में आया क्योंकि 'नेट के आसपास परस्पर विरोधी दस्तावेज हैं। अंत में मुझे लगा कि मुझे ऐसा कुछ करना होगा (क्योंकि यह एक बहुवचन आइटम है):
$video = \Drupal\node\Entity\Node::load($nid)->field_main_video->getValue();
... तो सरणी के माध्यम से पाश आदि का उपयोग कर मुझे यह, या तो खोजने में मदद नहीं की। क्योंकि, उदाहरण के लिए, अगर मैं kint($node)
और विधियों के तहत देखता हूं, तो मुझे वहाँ आइटम के रूप में getValue () नहीं दिखता है। अभी भी भयानक नहीं है, क्योंकि यह पता लगाने के लिए चारों ओर पर्याप्त उदाहरण थे।
जैसा कि मैंने गहराई से जाना, हालांकि, जो मुझे नहीं पता था (यह महत्वपूर्ण हिस्सा है) यह था कि वीडियो फ़ील्ड इकाई आईडी प्राप्त करने के बजाय, फिर इकाई को लोड करना, फिर इकाई में "उरी" फ़ील्ड ढूंढना, आदि (जैसे मैं D7 में होगा): एक तरीका था जो मुझे कोड के एक ही लाइन में URI प्राप्त करने देता है!
$url = \Drupal\node\Entity\Node::load($nid)->field_main_video->entity->getFileUri();
लेकिन मैं संभवतः इस getFileUri () का अस्तित्व कैसे जान सकता था? मैं एक ब्लॉग पोस्ट में इस पर ठोकर खाने के लिए हुआ। यह वास्तव में डी 7 की तुलना में एक यूआरआई प्राप्त करना आसान बनाता है ... लेकिन केवल अगर आप (जादुई) जानते हैं कि किसी वस्तु के प्रत्येक 'स्तर' के लिए क्या तरीके मौजूद हैं।
अंत में, इस उदाहरण के साथ मैं पूछ रहा हूं: आप किसी वस्तु के प्रत्येक स्तर के लिए सभी सार्वजनिक तरीके इस तरह से कैसे पा सकते हैं कि पढ़ना और समझना आसान है? ध्यान दें कि ऐसा लगता है कि मैन्युअल रूप से api.drupal.org खोजने या कुछ IDE विशिष्ट का उपयोग करने के बजाय ऐसा करने का एक ड्रुपल-केंद्रित (यानी। devel मॉड्यूल) तरीका होना चाहिए?