Come faccio a conservare i CFC in una directory separata e farli funzionare?

StackOverflow https://stackoverflow.com/questions/2379717

  •  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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top