coldfusion - अनुप्रयोग कोफ़सी में एक अनसॉक्ड ग्लोबल बनाने के लिए संभव है?




scope global-variables (2)

आपको दोनों application.cfc और Application.cfm की आवश्यकता होगी। Applicaiton.cfc के उचित भाग के लिए सभी प्रमुख कोड को Application.cfm से हटाएं।

इसके बाद, और यह एकमात्र लाइन हो सकती है, में Applicaiton.cfm:

<cfset variables.dsn = "myDSN" />

अब Application.cfc पर वापस जाएं और यह सभी कार्यों के बाहर जोड़ें:

<cfinclude template="Application.cfm" />

आपके test.cfm पर, अब स्कोप उपसर्ग के बिना डीएसएन चर आउटपुट करने में सक्षम हो:

<cfoutput>#dsn#</cfoutput>

यदि आप सीएफसी के अंदर कहीं भी variables.dsn को परिभाषित करते हैं, तो आप सीएफसी के चर के दायरे में चर को डाल रहे हैं, जो सीएफसी के लिए निजी है। इसे सीएफएम में परिभाषित करके, सीएफएम सहित, यह पृष्ठ अनुरोध के चर के दायरे में रखा जाता है।

मैं एक पुराने ऐप को माइग्रेट कर रहा हूं जो application.cfm का उपयोग करने के लिए एक application.cfc का उपयोग करता है सीएफएम कुछ ग्लोबल्स सेट करता है जैसे कि

<cfset dsn = "myDSN">

मैंने उस लाइन की कोड को ऐप्पलिफिकेशन स्टार्ट, ऑनरेक्स्टस्टार्ट, आदि में डालने की कोशिश की है, लेकिन उस मान को प्रिंट पेज परिणामों में एक त्रुटि में प्रिंट करने की कोशिश कर रहा है। एप्लिकेशन स्कोप में एक मान सेट करना (उदाहरण के लिए application.dsn) बिल्कुल ठीक काम करता है, लेकिन मैं एक तंग समय सीमा के तहत हूं और हर ग्लोबल के लिए साइट-चौड़े खोज और प्रतिस्थापित करके नाव को रोक नहीं सकता।

मैं जानता हूं कि इनको स्कोप में डालने का सही काम है, लेकिन, समय के लिए, वहाँ आवेदन करने के लिए स्विच करने का कोई तरीका है। सीएफसी लेकिन फिर भी अनसॉक्ड ग्लोबल वैरिएबल बनाते हैं?


अपने आप से कुश्ती लेने के बाद, मैं आपको अपना समाधान दे दूँगा ध्यान दें कि यह सीएफ 9 पर काम करता है, मुझे अन्य संस्करणों के बारे में पता नहीं है (पिछले संस्करणों में रैंक और एजेएक्स कॉल पर कोई समस्या है) असल में, आपके application.cfc में ऑन-रैइस्ट फ़ंक्शन होना आवश्यक है। यहां एक बुनियादी टेम्पलेट है:

<cffunction name="onRequest" access="public" returntype="void" output="true">
    <cfargument name="targetPage" type="string" required="true">

    <!--- include the requested page. --->
    <cfinclude template="#arguments.TargetPage#">
</cffunction>

As far as I understand it: it's actually the cfinclude that enables you to access the functions.  So, with this onRequest in your Application.cfc you can access the 'this' scope of the Application.cfc which would include your public functions & variables.
If you want a more in depth example of this then check out Framework-1 by Sean Corfield.  It does this exact thing, all API methods are contained in the Application.cfc.