La meilleure façon de stocker des données de configuration spécifiques à un site est probablement de créer un nouveau composant nommé de la façon suivante SiteConfig.cfc avec des méthodes telles que getProperty(nom de la propriété) y setProperty(nom de la propriété, valeur) . Vous devez ensuite stocker ce CFC dans la portée de l'application en faisant ce qui suit à l'intérieur de la méthode onApplicationStart de Application.cfc comme suit :
<cfset application.siteConfig = createObject("component", "SiteConfig").init() />
Pour en revenir à votre question initiale sur le stockage d'un UDF dans le champ d'application, voici une façon de le faire. La base est que dans onApplicationStart vous créerez une nouvelle structure persistante d'application avec les propriétés de configuration de votre site comme le nom du site et tout autre élément. Ensuite, une fonction est stockée dans un fichier CFM qui n'est cfincluded que dans onApplicationStart, puis copiée dans la portée de l'application. Cela signifie que tous vos fichiers CFM de pages ordinaires peuvent utiliser la fonction application.getProperty(propertyName) . Étant donné que la fonction n'est créée qu'une seule fois et qu'elle est stockée dans le champ d'application, elle répond aux exigences de votre question initiale, à savoir que l'affectation ne doit avoir lieu qu'au démarrage de l'application.
J'espère que cela vous aidera un peu !
getProperty.function.cfm
<cffunction name="getProperty" output="false">
<cfargument name="propertyName" type="string" required="true" />
<cfreturn application.config[propertyName] />
</cffunction>
Application.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>
test.cfm
<cfset propertyValue = application.getProperty("siteName") />
<cfdump var="#propertyValue#" />