2012-12-07 72 views
1

我的Application.cfc開頭:CFC經由帶來的附加功能包括

<cfcomponent extends="org.corfield.framework">

後來void function setupApplication() output="false" {

// tools 
include "initapp.cfm"; 

initapp.cfm有什麼,但功能在裏面。諸如:

<!--- Helper functions ---> 
<cfscript> 
string function stripHTML(str) output="false" { 
return REReplaceNoCase(arguments.str,"<[^>]*>","","ALL"); 
} 

application.stripHTML = stripHTML; 

</cfscript> 

函數的性質與會話沒有關聯。有沒有更好的方法使全局功能可用?

回答

5

如果您嘗試將輔助函數放在一起以用於CFC,則可以使用component.cfc文件。

使用component.cfc文件

所有氟氯化碳自動延長的ColdFusion WEB-INF/cftags/component.cfc組件。 (WEB-INF目錄位於 ColdFusion上的cf_root/wwwroot目錄配置了嵌入式J2EE服務器 當您在J2EE服務器上部署 ColdFusion時,它位於cf_root目錄中。)此CFC以零長度 文件。 您可以將它用於您希望ColdFusion應用程序服務器實例中的所有CFC繼承的任何核心方法或屬性。

注:當您安裝ColdFusion的新版本,安裝程序 替換爲新版本的現有component.cfc文件。 因此,在升級之前,應將保存的任何代碼添加到component.cfc文件中,然後將代碼複製到新的 component.cfc文件中。

如果解決方案過於全球性可以延長你的助手CFC,但它在每一個CFC做並沒有回答您的一次性設置它和忘記它的想法。請參閱Using CFCs effectively

如果您的幫助函數用於.cfm文件,我會像Adam建議的那樣。我通常將我的幫助函數放在位於CFC文件夾中的「tools」cfc中,並使其成爲應用程序範圍的cfc。

function onApplicationStart(){ 
    application.tools = createObject("component", "cfc.tools"); 
} 

我的一個幫助函數記錄索引solr集合所需的時間。使用它看起來像

<cfset application.tools.logSolrIndex('collectionName',getTickCount()-start,qFileList.recordCount)> 

最後一招: 如果你有堅持的包括對的Application.cfc的境外使用,我可能只是包括initapp.cfm onRequest()你有你的頁面之前。

+0

有壞鏈接 –

3

將函數放入庫CFC中,然後將該CFC的實例放入onApplicationStart()的應用程序範圍中。

也就是說,如果您隨後在其他CFC中引用了此應用程序範圍的CFC(這不是一個交易斷路器,而是一個考慮因素),那麼您會有點破壞封裝。

你可以看一下某種依賴注入的方式來緩解這種(如:ColdSpring

無論怎樣我落得這樣做的話,我就不會做你正在做的方式,恐怕。

+0

難道你不能只用extends =「myGeneralFunctions」來導入這些方法嗎? –

+0

@Michael Giovanni Pumo - 延伸已被使用 –

+0

哦,我不知道有多個'延伸'是不可能的。 –