我的application.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>
功能的性质与会话无关。有没有更好的方法让全球的功能可用?
答案 0 :(得分:5)
如果您尝试将辅助函数放在一起以便在CFC中使用,则可以选择使用component.cfc文件。
使用component.cfc文件
所有CFC都会自动扩展ColdFusion WEB-INF / cftags / component.cfc组件。 (WEB-INF目录在 ColdFusion上的cf_root / wwwroot目录配置了一个 嵌入式J2EE服务器。部署时,它位于cf_root目录中 J2EE服务器上的ColdFusion。)此CFC以零长度分布 文件。 您可以将它用于所需的任何核心方法或属性 要继承ColdFusion应用程序服务器实例中的所有CFC。
注意:安装较新版本的ColdFusion时,请进行安装 procedure用新版本替换现有的component.cfc文件。 因此,在升级之前,您应该保存您拥有的任何代码 添加到component.cfc文件,然后将代码复制到新的 component.cfc文件。
如果该解决方案是TOO global,您可以扩展您的帮助程序cfc,但必须在每个cfc中完成,并且不会回答您的一次性设置 - 忘记它的想法。见Using CFCs effectively
如果您的帮助函数用于.cfm文件,我会像Adam建议的那样。我通常将我的帮助函数放在位于CFC文件夹中的“工具”cfc中,并使其成为应用程序范围的cfc。
function onApplicationStart(){
application.tools = createObject("component", "cfc.tools");
}
我的一个辅助函数记录索引solr集合所需的时间。使用它看起来像
<cfset application.tools.logSolrIndex('collectionName',getTickCount()-start,qFileList.recordCount)>
最后的手段: 如果您必须坚持使用include以在application.cfc之外使用,我可能只需在您包含页面之前包含initapp.cfm onRequest()。
答案 1 :(得分:3)
将函数放在库CFC中,然后将该CFC的实例放在onApplicationStart()
的应用程序范围中。
那就是说,如果你在其他CFC中引用这个应用程序范围的CFC,你就会打破封装,这是一个考虑因素(不一定是交易破坏者,而是一个考虑因素)。
您可以查看某种依赖注入方法来缓解这种情况(例如:ColdSpring)
无论我最终采用哪种方式,我都会不按照你的方式做到这一点,我很害怕。