coldfusion cfc

En Coldfusion, ¿cómo inicio un componente que se encuentra arriba de la carpeta de ruta actual?



cfc (5)

Si tengo una estructura de carpetas que se parece a esto:

/ /bin/myComponent.cfc /reports/index.cfm

¿Cómo inicio myComponent.cfc desde index.cfm?

myService = createObject("component", "bin.myComponent");

Usando la sintaxis de puntos, sé cómo ir a carpetas más profundas, pero ¿cómo puedo subir una carpeta y bajar a la otra carpeta? Usando la sintaxis de barra sería algo como esto:

../bin/myComponent.cfc

Pero createObject () no funciona de esa manera. Me gustaría mantener una ruta relativa para poder mover esta carpeta a otro servidor sin romper las rutas.

Ideas? ¡Gracias!

EDITAR:

Mi ejemplo no mostró una estructura de carpetas lo suficientemente profunda para las respuestas creativas que todos ustedes han proporcionado. Esto es lo que debería haber hecho:

/[my project folder]/ /[my project folder]/bin/myComponent.cfc /[my project folder]/reports/index.cfm

Mi pregunta básica era si era posible subir un directorio al usar createObject ("component", "dot path") desde index.cfm a myComponent.cfc SI el nombre de [mi carpeta de proyecto] no es estático en todas las instalaciones de el proyecto.

Si la respuesta es NO, entonces solo tendré que averiguar cuál es la mejor práctica, ya sea una asignación o una configuración de la aplicación.


Es el final de la semana difícil, por lo que es muy probable que se pueda mejorar el siguiente código, pero en general este enfoque debería funcionar:

<cfscript> // this script is here http://XXXXXXX/test/paths/relative/reports/index.cfm // component is here http://XXXXXXX/test/paths/relative/bin/myComponent.cfc local = {}; // initialize with dynamic mapping local.myComponentDynamic = createObject("component", "/bin/myComponent"); // grab the current directory name local.parentPathExpanded = ExpandPath("../"); local.scriptPathExpanded = ExpandPath(cgi.SCRIPT_NAME); local.thisDirectory = GetDirectoryFromPath(Replace(local.scriptPathExpanded, local.parentPathExpanded, "")); // build base path local.scriptPathDirectory = GetDirectoryFromPath(cgi.SCRIPT_NAME); local.basePath = Replace(local.scriptPathDirectory, local.thisDirectory, ""); // this is relative path we already know local.relativePath = "bin/myComponent"; // initialize with slash-syntax (path starting with /) local.myComponentSlash = createObject("component", local.basePath & local.relativePath); // convert path to the dot-syntax local.dottedPath = Replace(local.basePath & local.relativePath, "/", ".", "ALL"); local.dottedPath = Right(local.dottedPath, Len(local.dottedPath)-1); // initialize with dot-syntax path local.myComponentDot = createObject("component", local.dottedPath); </cfscript> <cfdump var="#local#">

He dividido el proceso en variables separadas y he volcado el contenedor común para facilitar la lectura y la comprensión de este ejemplo.

Pero de cualquier forma, si puede usar la asignación dinámica en Application.cfc, úselo .

EDITAR: He agregado este ejemplo, asumiendo que tiene el siguiente Application.cfc en la carpeta principal (por ejemplo, "../Application.cfc" si está mirando desde index.cfm):

<cfcomponent output="false"> <cfset this.mappings["/bin"] = getDirectoryFromPath(getCurrentTemplatePath()) & "bin/" /> </cfcomponent>

Mi ejemplo de "conversión de caminos" es solo un truco divertido y jugar con un código que no es realmente sencillo para las buenas aplicaciones.


Manejamos esto usando un mapeo en el administrador de cf. Generalmente, todos los componentes van en un directorio que está arriba de la raíz www. En su caso, podría agregar una asignación a / que le permitiría hacer:

myService = createObject("component", "mymapping.bin.myComponent");


Si tiene el archivo Application.cfc en la raíz de la estructura de su carpeta, podría usar algo como esto:

<cfset this.mappings["/local"] = getDirectoryFromPath(getCurrentTemplatePath()) />

y luego acceda a él a través de "local.bin.myComponent"


Tuve este mismo problema y esta fue mi solución. Es bastante sencillo, pero tardó unas horas en golpearme. Esperemos que esto le salve a alguien algún tiempo.

Comencé con

<bean id="ColdBooksConnectionService" class="myservice.model.service.ConnectionService" />

y siempre recibía el error de que no estaba disponible, así que escribí la ruta completa

<bean id="ColdBooksConnectionService" class="/CFIDE.administrator.myservice.model.service.ConnectionService" />

Y el problema está resuelto.

Espero que esto ayude.


solo usa la ruta completa desde la raíz

<cfset obj = createObject("component", "bin.cart.item")>

donde item.cfc se encuentra en [raíz del sitio web] / lib / cart / - esto funcionará desde cualquier lugar en su código.