cfc通过include引入附加功能

时间:2012-12-07 08:52:17

标签: coldfusion coldfusion-9 application.cfc fw1

我的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>

功能的性质与会话无关。有没有更好的方法让全球的功能可用?

2 个答案:

答案 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

无论我最终采用哪种方式,我都会按照你的方式做到这一点,我很害怕。