存储站点特定配置数据的最佳方法可能是创建一个名为SiteConfig.cfc的新组件,并使用诸如getProperty(propertyName)和setProperty(propertyName, value)之类的方法。然后,您可以通过在 Application.cfc 的 onApplicationStart 方法中执行以下操作将此 CFC 存储在应用程序范围中,例如:
<cfset application.siteConfig = createObject("component", "SiteConfig").init() />
回到你原来的问题,虽然关于在应用程序范围中存储 UDF,下面是一种方法。基础是在onApplicationStart中,您将使用站点的配置属性(如 siteName 和其他任何内容)创建一个新的应用程序持久结构。然后将一个函数存储在一个 CFM 文件中,该文件仅包含在 onApplicationStart 中,然后复制到应用程序范围内。这意味着您的所有常规页面 CFM 文件都可以使用application.getProperty(propertyName)。由于该功能仅创建一次并存储在应用程序范围内,因此它满足您最初的问题关于“分配只会在应用程序启动时发生”的要求。
希望这个对你有帮助!
getProperty.function.cfm
<cffunction name="getProperty" output="false">
<cfargument name="propertyName" type="string" required="true" />
<cfreturn application.config[propertyName] />
</cffunction>
应用程序.cfc
<cffunction name="onApplicationStart" output="false">
<cfset application.config = structNew() />
<cfset application.config.siteName = "My App's Display Name" />
<cfinclude template="getProperty.function.cfm" />
<cfset application.getProperty = variables.getProperty />
</cffunction>
测试.cfm
<cfset propertyValue = application.getProperty("siteName") />
<cfdump var="#propertyValue#" />