2012-03-19 9 views
6

प्लोन निरंतर उपयोगिताओं तक पहुंचने की अनुशंसित विधि क्या है और क्यों?getToolByName() बनाम अन्य

  • getToolByName (संदर्भ, "portal_url")

  • प्रत्यक्ष अधिग्रहण: context.portal_url

  • iTools इंटरफ़ेस

आदि

+1

और अंतिम plone.api विधियां - http://readthedocs.org/docs/ploneapi/en/latest/utilities.html#get-tool –

+2

I अभी भी प्लॉन पर विचार करें e.api थोड़ा प्रयोगात्मक और इस प्रकार अनुशंसित नहीं है ... मैं भी जवाब –

उत्तर

5

मुझे लगता है कि उत्तर getToolByName के कोड में है (http://svn.zope.org/Products.CMFCore/trunk/Products/CMFCore/utils.py?view=markup)। एक पहला प्रयास यह कोशिश करता है एक के रूप में

  • getUtility साथ इंटरफेस के लिए ऊपर देख रही है और एक संदर्भ में यह भी शामिल है (है कि मेरे पास एक अच्छी बात है) द्वारा वांछित उपकरण प्राप्त करने के लिए के रूप में

    • : यह विधि यह करता है के रूप में @keul कहा getToolByName लेकिन,, वहाँ भी है कैशिंग शामिल है, और यहाँ के लिए देख: वापस आने यह सीधे

    तो केवल विधि "उन सब को शासन करने के लिए" स्रोत संदर्भ से उपकरण प्राप्त करने के लिए कोशिश करता है हो रहा है (http://collective-docs.readthedocs.org/en/latest/misc/context.html#itools-interface) यह स्पष्ट है कि ITools इंटरफ़ेस का उपयोग करते हुए, जब यह उन इंटरफ़ेस के कारण विफल नहीं होता है जो अभी तक उस इंटरफ़ेस को लागू नहीं करते हैं, यह तेज़ है।

    उपरोक्त कारणों के लिए, अंत में मैं सुझाव चाहते हैं:

    1. iTools (तेज)
    2. getToolByName (सुरक्षित)

    (के रूप में प्रत्यक्ष अधिग्रहण पहले ही से करने की कोशिश की है GetToolByName, यदि यह विफल हो जाता है, तो आपके पास अधिक भाग्य नहीं होगा)

  • +1

    के पीछे अंतर्दृष्टि जानना चाहता हूं मुझे आश्चर्य है कि क्यों GetToolByName पहले ITools से पूछताछ नहीं करता है। –

    +0

    क्योंकि 'getToolByName' सीएमएफसीओआर पैकेज में एक विधि है, जबकि' plool.app.layout' में 'ITool' एक इंटरफ़ेस है। चूंकि इसका डोमेन नाम इंगित करता है, p.a.layout यह एक उच्च स्तरीय पैकेज है और यह प्लोन विशिष्ट है। –

    2

    iTools का उपयोग उपयोगिताएं सबसे अच्छी विधि होनी चाहिए, क्योंकि उन्हें कैश किया गया है। हालांकि इसने कभी-कभी मुझे समस्याएं दीं (पोर्टल_मेम्बरशिप टूल से संबंधित, लेकिन मुझे विवरण याद नहीं है) इसलिए उन दुर्लभ मामलों में मैं getToolByName पर स्विच करता हूं। अंतिम एक प्रत्यक्ष अधिग्रहण है।

    संबंधित मुद्दे