क्या वस्तुओं का निरीक्षण करने का एक अच्छा तरीका है जिसका प्रकार EntityDrupalWrapper वर्ग से लिया गया है?


38

मुझे यकीन है कि यह प्रश्न अन्य जटिल ऑब्जेक्ट प्रकारों पर लागू होता है, लेकिन EntityDrupalWrapperक्या मैं वर्तमान में साथ काम कर रहा हूं। यह वस्तु का प्रकार है entity_metadata_wrapper()(और शायद अन्य)।

निम्नलिखित जैसे कोड का उपयोग करते समय:

$order_wrapper = entity_metadata_wrapper('commerce_order', $order_object);
dpm($order_wrapper);

डेवेल से आउटपुट बहुत उपयोगी नहीं है:

स्क्रीनशॉट

यह नहीं दिखाता है कि आप कॉल के dpm()साथ देखने के लिए क्या उम्मीद करेंगे, उदाहरण के लिए, एक stdClassऑब्जेक्ट।

dvm()ऑब्जेक्ट को प्रिंट करने के लिए एक समान कॉल , लेकिन एक तरीके से मैं परिचित नहीं हूं, और यह बहुत पठनीय नहीं है।

मैंने कोशिश की है debug()और यह एक PHP उपयोगकर्ता सूचना का उत्पादन करता है जो कुछ इस तरह दिखता है:

स्क्रीनशॉट 2

संयोग से उस चेतावनी में निहित HTML आउटपुट वही आउटपुट है जो dvm()स्क्रीन पर प्रिंट करता है।

मैं इस प्रकार की वस्तुओं का निरीक्षण कैसे कर सकता हूं (अधिमानतः क्रूमो के साथ), इसलिए मैं देख सकता हूं कि क्या गुण उपलब्ध हैं? या मैं उपयोग कर रहा हूँ dvm()?


डिबग () ड्रुपल 7 में पेश किया गया
शोएब नवाज

धन्यवाद @ShuaibNawaz, कि एक साथ और भी कम सफलता हालांकि मुझे डर लग रहा (मैं सवाल को नवीनीकृत किया है)
क्लाइव

2
हां, यह रैपर वर्गों के साथ समस्याओं में से एक है। dpm () / krumo केवल सार्वजनिक गुण देखता है। आवरण वर्गों में सब कुछ जादू __get () और __set () विधियों के माध्यम से संरक्षित और उपयोग किया जाता है।
बर्दिर

@ बेर्डिर मैं इससे डरता था; मैंने देखा नहीं था, लेकिन इसमें बहुत गंध थी __get()और __set()शामिल थे। आउट ऑफ इंटरेस्ट आपके पास यह पता लगाने का कोई पसंदीदा तरीका है कि किस वर्ग के गुण क्या आवरण के लिए उपलब्ध हैं? या यह सिर्फ अनुभव के आधार पर just जानने ’की बात है?
क्लाइव

1
@Berdir मुझे नहीं लगता कि आप इस के सूचित किया जाएगा है, तो आप उपयोग कर सकते हैं dpm($wrapper->getPropertyInfo());, यह वास्तव में चीजों में मदद करता है
क्लाइव

जवाबों:


38

Dpm ($ आवरण-> getPropertyInfo ()) का उपयोग करें;

यह डॉक्स में है


और अपने नोड से विशेष क्षेत्रों का निरीक्षण करने के लिए आप उपयोग कर सकते हैंkpr($wrapper->my_custom_field->value());
wranvaud

4

मैं EntityDrupalWrapper ऑब्जेक्ट्स के साथ खेल रहा था। डिबग () आमतौर पर __toString () द्वारा तैयार किया गया आउटपुट लौटाता है

मैंने EntityDrupalWrapper ऑब्जेक्ट का उपयोग फ़ोरच के लिए पुनरावृत्त किया और इससे गुणों के नाम को सूचीबद्ध करने में मदद मिली।

foreach($order_wrapper as $name => $obj){
  debug($name);
  debug(get_class($obj)); //EntityValueWrapper
}

यहाँ $objएक प्रकार की वस्तु हैEntityValueWrapper

$ obj को $ obj-> value () द्वारा पढ़ा जा सकता है और $ obj-> set ('value') द्वारा लिखा जा सकता है;

संपादित करें:

यदि आपने अपना
पैपर बिना दूसरे पैराम के निकाय बनाया है, तो unit_metadata_wrapper ('वाणिज्य_क्रम');
तब सेट और मूल्य विधियां अपवाद को फेंक देंगी क्योंकि वे लागू नहीं होते हैं।


4

मैं रैपर को अनियंत्रित करने के लिए अपने छोटे विजेट को लिखकर घाव कर रहा हूं:

function _wrapper_debug($w) {
  $values = array();
  foreach ($w->getPropertyInfo() as $key => $val) {
    $values[$key] = $w->$key->value();
  }
  return $values;
}

dpm(_wrapper_debug($some_object_wrapper));

आशा है कि कोई इसे उपयोगी पाता है।


3

निरीक्षण मॉड्यूल डेटा आप डिबग करना चाहते हैं का एक अच्छा संरचनात्मक दृश्य प्रदान करता है।

डेटाबेस लॉग (रिपोर्ट / हाल ही के लॉग संदेश) को फ़ाइल या स्क्रीन पर भेजने के लिए शिक्षाप्रद और अच्छी तरह से स्वरूपित वैरिएबल डंप, गहरे स्टैक के निशान और निष्पादन समय प्रोफाइल प्राप्त करें।


3

यदि आप मूल वस्तु का निरीक्षण करना चाहते हैं जो रैपर को "पावर" कर रहा है, तो कोशिश करें:

dpm($wrapper->raw())

यह मेरे लिए अच्छा काम करता है।



हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.