2012-08-24 33 views
11

मैं वर्तमान में Getting Started with Grails, Second Edition by Scott Davis & Jason Rudolph में उदाहरणों को पढ़ रहा हूं और काम कर रहा हूं।क्रियाओं के रूप में उजागर होने से Grails नियंत्रक में विधि को रोकें

यह पुस्तक Grails 1.2 का उपयोग करके लिखी गई थी।

वे एक कोड नमूना है जहाँ वे एक debug() विधि है कि beforeInterceptor से फोन किया और बताया कि जब debug() एक विधि है, यह यूआरएल द्वारा उपयोगकर्ता के लिए बाहर उजागर नहीं किया जाता है बनाने के लिए है। वे बताते हैं कि क्लोजर को अंतिम उपयोगकर्ता को नियंत्रक क्रियाओं के रूप में उजागर किया गया है, लेकिन विधियां नहीं हैं।

मैं भी Grails 1.3 documentation पर देखा, वे एक नियमित रूप से विधि का उल्लेख करने: क्योंकि यह एक विधि है, न कि बंद है

def auth() { ... } 

निजी के रूप में इलाज किया जा रहा। Grails 1.3 के रूप में जो सच था।

हालांकि, Grails 2.0.0, Controller Actions can be implemented as both methods and closures के रूप में।

इससे मुझे कंट्रोलर में एक विधि बनाने के प्री-ग्रिल 2.0.0 में उपलब्ध कार्यक्षमता को दोहराने के लिए एक तरीका है (और पता लगाने का प्रयास करें) जो कि अंतिम उपयोगकर्ता के संपर्क में नहीं आता है।

मैंने 2 संभावित दृष्टिकोणों के बारे में सोचा और सोच रहा था कि कौन सी बेहतर शैली/अभ्यास होगा और क्यों?

  1. एक्सेसर निजी के रूप में सेट करना है, यानी private def auth()
  2. रिक्त स्ट्रिंग पर विधि के लिए allowedMethods स्थापना:

    static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""] 
    

दोनों दृष्टिकोण वांछित प्रभाव हासिल करने के लिए लग रहा था। हालांकि, पहला दृष्टिकोण एक HTTP त्रुटि कोड 404 देता है, और दूसरा दृष्टिकोण HTTP त्रुटि कोड 405 देता है।

क्या कोई जानता है कि कौन सा दृष्टिकोण बेहतर होगा? इसके अलावा, क्या ऐसा करने के लिए कोई अन्य दृष्टिकोण है, या "सर्वोत्तम अभ्यास तकनीक" है?

उत्तर

13

Grails 2.0 में, निजी या संरक्षित के रूप में चिह्नित किसी भी तरीके को क्रियाओं पर नहीं माना जाता है।

इस तरह से एक विधि को चिह्नित करना रखरखाव के कारणों के लिए अधिक जानकारीपूर्ण होगा, क्योंकि यह विधि घोषणा पर सही दिखाई देता है कि विधि allowedMethods चर पर वापस देखने के बजाय क्रियाशील है या नहीं। साथ ही, अगर इसकी घोषणा हटा दी जाती है या allowedMethods में नहीं जोड़ा जाता है तो एक अप्राप्य विधि को गलती से सुलभ नहीं किया जाएगा।

4

इसे निजी के रूप में चिह्नित करना सबसे अच्छा है क्योंकि 404 छिपाते हैं कि वहां कुछ भी है जहां 405 का उपयोग यह जानने के लिए किया जा सकता था कि वहां एक समारोह था। (यह नहीं कि यह अधिक उपयोग होगा।)

यह भी विधि को चिह्नित करना अच्छा है क्योंकि यह इस विधि पर दिखाता है कि यह कोई कार्रवाई नहीं है।

+2

+1, जिन विधियों को उजागर नहीं किया जाना चाहिए उन्हें "खुलासा" नहीं होना चाहिए, न कि "अनुमति नहीं"। – shihpeng