coldfusion cfc

coldfusion - Extender un CFC usando una ruta relativa



(4)

Quiero extender un CFC en un directorio diferente y tengo un par de opciones, pero no puedo encontrar la manera de hacerlo:

A) Use un mapeo dinámico (esto tendrá que ser dinámico basado en el sitio, por ejemplo, para el sitio en vivo sería cfc.myPackage.MyCFC pero en un sitio de desarrollo sería myCfcRoot.myPackage.MyCFC) - Lo he intentado poner expresiones en el bit de extensión, pero obviamente a CF no le gusta eso, por ejemplo:

<cfcomponent name="MyComponent" extends="#config.cfcRoot#.BaseComponent">

o

<cfcomponent name="MyComponent" extends="#GetRealPath(../BaseComponent.cfc)#">

B) Proporcione una ruta relativa (de alguna manera) al CFC para extenderla.

Me temo que no puedo hacer esto, pero espero que haya algo que me he perdido.


A menos que el CFC esté en el mismo directorio que el guión de llamada, el CFC debe ubicarse y referenciarse desde una ruta relativa a un "Mapeo".

He descubierto que a veces es necesario asegurarse de que "/" esté asignado a la raíz del documento de su servidor web y que se convierta en la base para todas las rutas relativas. O puede configurar una asignación para un directorio CFC que contenga todos sus CFC comunes.

Esta pantalla se encuentra en el Administrador de ColdFusion en "Configuración del servidor" -> "Asignaciones".


Daniel es básicamente correcto, necesitas un mapeo. Sin embargo, hay 3 soluciones.

Los CFC escogerán la ruta actual como un mapeo de raíz relativo, de modo que si sus CFC están todos en el mismo directorio, simplemente puede decir

<cfcomponent name="MyComponent" extends="Example">

O si sus componentes están en subdirectorios del cfc actual, puede acceder a él:

<cfcomponent name="MyComponent" extends="subdirectory.Example">

En segundo lugar, si está ejecutando ColdFusion 8, puede definir una asignación en su application.cfc usando la estructura de mapeos como esta:

<cfset this.mappings["/MyApp"] = expandPath(".") />

Hay dos buenas referencias para Application.cfc, primero, el ejemplo de Ray Camden Application.cfc que solo da una buena vista de lo que pasa, luego la página de configuración de la aplicación CF8 Live Docs , que tiene una sección sobre mapeos junto con algunos buenos comentarios.

Finalmente, puede usar el mapeo integrado de su raíz web, de modo que si su aplicación está en un subdirectorio llamado "MyApp" fuera de la raíz web, su mapeo raíz será "MyApp". Supongamos que coloca correctamente sus componentes en:

wwwroot/MyApp/com/MyApp/example.cfc

El mapeo de este cfc en este caso será:

MyApp.com.MyApp.Example

Y usando tu ejemplo, puedes extenderlo así:

<cfcomponent name="MyComponent" extends="MyApp.com.MyApp.Example">

Cualquier otra cosa, como si sus componentes están fuera de la raíz web, o si no está seguro de cuál será la estructura de carpetas de la aplicación finalizada, y deberá establecer una asignación en el administrador de CF.


Ahora esto solo se prueba en cf8, por lo que otro motor podría ser diferente.

si desea utilizar rutas relativas para extender aplicaciones, puede hacerlo, pero debe iniciarlas con un " / ". Por ejemplo, puede hacer esto para extender una aplicación.cfc desde su raíz web al directorio debajo de su raíz web:

<cfcomponent output="false" extends="/.application"> <!--- whatever code you have ---> </cfcomponent>

ahora digamos que tengo las siguientes rutas en mi aplicación:

[webroot]/1/1a [webroot]/2

digamos que la aplicación.cfc en [webroot] / 1 / 1a extiende la aplicación.cfc en [webroot] . ahora quiero colocar un application.cfc en [webroot] / 2 y extender el application.cfc en [webroot] / 1 / 1a . Todo lo que tendría que hacer en mi [webroot] /2/application.cfc es el siguiente:

<cfcomponent output="false" extends="/./1/1a/application"> <!--- whatever code you have ---> </cfcomponent>

espero que esto tenga sentido.


Con respecto al Método B. Se puede hacer usando un archivo adicional en su ejemplo. Es un archivo adicional por cfc que desea extender por cada directorio desde el que desea extender.

Los 3 archivos que se requieren.

  • /somepathtobasecomponent/basecomponent.cfc (su archivo de componente base)
  • /pathtoworkingcfc/function.cfc (el archivo con el atributo extends)
  • /pathtoworkingcfc/basecomponent_extend.cfc (el nuevo archivo que hará la extensión)

/somepathtobasecomponent/basecomponent.cfc

Nada para cambiar aquí. Esto permanece igual.

/pathtoworkingcfc/function.cfc

en la etiqueta cffunction establece el se extiende a extends="basecomponent_extend"

/pathtoworkingcfc/basecomponent_extend.cfc

El único contenido del archivo es un cfinclude

<cfinclude template="/somepathtobasecomponent/basecomponent.cfc">