通过include引入附加功能的cfc



My 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>

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

如果您试图将辅助函数组合在一起以在cfc中使用,一个选项可能是使用component.cfc文件。

使用component.cfc文件

所有CFCs自动扩展ColdFusionWEB-INF/cftags/component.cfc组件。(WEB-INF目录位于ColdFusion上的cf_root/wwwwroot目录配置了嵌入式J2EE服务器。部署时它位于cf_root目录中J2EE服务器上的ColdFusion。)该CFC以零长度分布文件您可以将其用于所需的任何核心方法或属性要继承的ColdFusion应用程序服务器实例中的所有CFC

注意:当您安装新版本的ColdFusion时该过程将用新版本替换现有的component.cfc文件。因此,在升级之前,您应该保存您拥有的任何代码添加到component.cfc文件中,然后将代码复制到新的component.cfc文件

如果该解决方案过于全局,您可以扩展您的助手cfc,但它必须在每个cfc中完成,并且不会回答您的一次性设置和忘记它的想法。请参阅有效使用氟氯化碳

如果你的助手函数是在.cfm文件中使用的,我会按照Adam的建议。我通常将助手函数放在位于cfc文件夹中的"工具"cfc中,并使其成为应用程序范围的cfc。

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

我的一个助手函数记录索引solr集合所花费的时间。使用它看起来像

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

最后的手段:如果你必须坚持在application.cfc之外使用include,我可能只需要在你包含页面之前包含initapp.cfm onRequest()。

将函数放在库CFC中,然后将该CFC的实例放在onApplicationStart()中的应用范围中。

也就是说,如果你在其他氟氯化碳中引用这个应用程序范围的氟氯化碳,那你就有点破坏了封装,这是一个考虑因素(不一定是交易破坏者,而是一个考虑)。

您可以考虑某种依赖注入方法来缓解这种情况(例如:ColdSpring)

无论我以哪种方式结束,恐怕我都不会像你现在这样做。

最新更新