this.mappings Coldfusion ne fonctionne pas dans un cfc -> fonction
-
11-10-2019 - |
Question
Comment puis-je obtenir les correspondances que j'ai définis dans application.cfc au travail dans d'autres fonctions dans d'autres cfc?
i.e.. this.mappings [ « plugins »] fonctionne très bien sur une page mais si je tente de instancier un cfc contenant une fonction qui appelle this.mappings [ « plugins »] - elle échoue.
Merci
EDIT: Je ne sais pas - voici ce que je suis en train de le faire: En application.cfc:
this.mappings["Plugins"] = \
getDirectoryFromPath(getCurrentTemplatePath())&'Assets/Plugins';
et stock.cfc:
<cfcomponent output="yes" >
<cffunction name="showIndecies" access="public" output="yes" returntype="string">
<cfscript>
j = 1;
variables.indeciesArray = ArrayNew(1);
variables.indeciesFile = \
application.mappings["Plugins"]&'/StockMarketData/Data/indecies.csv';
</cfscript>
La solution
Je pense que vous appelez le mauvais mapping. Utilisation de votre définition application.cfc:
this.mappings["plugins"]
serait alors référencé dans tout autre code par "plugins" si:
var aName = new plugins.theCFC()
var aName = createObject("component","plugins.theCFC").init()
<cfinclude template="/plugins/aFile.cfm">
HTH, sinon poster votre code sur la page d'appel.
Autres conseils
Dans un CFC, dont Application.cfc est l'une, la portée « ce » que de se rapporte à cette CFC spécifique. Ainsi, lorsque vous êtes dans une page CFM, qui relève de la compétence de la Application.cfc, le « ce » champ d'application est pour le Application.cfc, mais quand dans un CFC, son CFC pour ce particulier.
Cela dit, pourquoi auriez-vous besoin d'accéder aux applications directement struct? Si vous souhaitez utiliser cette application pour charger un objet ou d'inclure un fichier, vous pouvez juste faire <cfinclude template="/plugins/path/to/myfile" />
ou <cfset obj = createobject("component","plugins.path.to.my.cfc") />
.
Quelle est votre cas d'utilisation pour avoir besoin d'accéder au struct directement? Essayez-vous de le modifier?
* modifié au code fix
À moins que les choses ont changé dans CF9, votre première erreur dans le code qui définit les clés de mappage sans une barre oblique « / » au début de chaque nom de mappage.
Vous définissez les correspondances comme
this.mappings["plugins"] =
Il devrait plutôt être
this.mappings["/plugins"] =
Notez la barre oblique « / » au nom de la clé de la structure. Vous devez nommer chaque mappage de cette façon.
alors vous référer aux applications comme Sam Fermier mentionné dans son commentaire "
serait alors référencé dans tout autre code par "plugins" si:
var aName = new plugins.theCFC() var aName = createObject("component","plugins.theCFC").init() <cfinclude template="/plugins/aFile.cfm">