Come faccio a conservare i CFC in una directory separata e farli funzionare?
-
24-09-2019 - |
Domanda
C'è un modo per specificare il percorso del componente nel tag?
Sto usando componenti ColdFusion per la mia applicazione. La mia applicazione ha diverse cartelle, tuttavia, e ogni volta che voglio un CFC per lavoro, devo salvarlo nella stessa directory in cui i file che necessitano di un accesso. Questo si traduce in mia creazione di diversi file CFC che sono identici.
C'è un modo per memorizzare i miei CFC in una directory e farlo funzionare attraverso il mio sito?
Soluzione
Come altri hanno notato, si può fare cose interessanti con mappature e le funzioni che individuano la radice della vostra applicazione, ma al cuore della tua domanda è specifica generale percorso.
vorrei suggerire di leggere la parte del Uso di ColdFusion Components documentazione dal titolo Specifica della posizione CFC .
In sostanza, quello che dice è che se la vostra applicazione vive a http://example.com/myApp/ e si dispone di una pagina per http://example.com/myApp/foo/bar/ fubar.cfm che vuole utilizzare il componente a:
/myApp/foo/components/library/fubar.cfc
poi fubar.cfm dovrebbe fare qualcosa di simile:
<cfset fubar=createObject("component", "myApp.foo.components.library.fubar") />
si prende il percorso del file e sostituire le barre con i puntini (alias "notazione punto"), e anche cadere il ".cfc" dal nome del file del componente che si desidera caricare.
In aggiunta, è possibile utilizzare mappature di nome (come descritto Aaron), quindi se si crea una mappatura chiamato /components
che punti a /myApp/foo/components/
poi la chiamata createObject sarebbe simile a questa:
<cfset fubar = createObject("component", "components.library.fubar") />
Gli stessi percorsi dot-notazione può essere utilizzato in <cfinvoke />
, come parte dell'attributo component
:
<cfinvoke component="components.library.fubar" ... />
Altri suggerimenti
Ci sono alcune cose che puoi fare qui. Suggerirei di mettere i componenti in cui hanno senso (root / COM o root / modelli, o altro) e poi riferimento dalla vostra base dell'applicazione.
Nel amministratore ColdFusion, è possibile impostare un percorso mappato nella root dell'applicazione e fare riferimento i componenti da quel percorso.
myObject = createObject('component','nameOfMyMapping.models.service.answerStackOverflowQuestions');
È inoltre possibile eseguire una logica nel vostro Application.cfm / Application.cfc per trovare principale dell'applicazione in modo dinamico. Questo metodo non richiede permessi speciali e funziona se vi trasferite l'applicazione ad un altro ambiente. Un rapido Google alzato un post sul blog di Peter Freitag con una funzione che farà proprio questo. Basta essere sicuri di sostituire il .cfm se si utilizza un'applicazione .cfc . http://www.petefreitag.com/item/630.cfm
CFLib.org ha anche un metodo che sembra che sarà trovare il percorso principale per voi. http://www.cflib.org/udf/GetRootPath
Una volta che avete il vostro percorso radice memorizzato in una variabile cose si fanno facile.
myObject = createObject('component','#myRoot#.models.service.answerStackOverflowQuestions');
Infine, molti quadri hanno fatto di questo, e molti altri taks comuni, molto semplici. È possibile scegliere praticamente qualsiasi quadro ColdFusion. Qualcuno già ha inventato la ruota;).
Buon divertimento!
Per ColdFusion 9
FileSystem
/
lib/
DataAccess.cfc
IndexingService.cfc
app/
Application.cfc
index.cfm
File: /app/Application.cfc
component {
root = goUpDirectory(2, GetCurrentTemplatePath());
This.mappings["/lib"] = "#root#/lib";
This.mappings["/app"] = "#root#/app";
function goUpDirectory(levels, path) {
for(levels = levels; levels >= 1; levels -= 1) {
path = GetDirectoryFromPath(path);
path = Left(path, Len(path) - 1);
}
return path;
}
}
File: /app/controllers/UsersController.cfc
component {
...
da = new lib.DataAccess();
...
}
Per ColdFusion 8
Come sopra, usando solo CreateObject
invece di new
, <cfcomponent />
invece di component { }
, ecc.