2008-11-13 13 views
9

quiero extender un CFC en un directorio diferente y tengo un par de opciones, pero no puede encontrar la manera de hacer esto:extender una CFC con una ruta relativa

a) Utilizar 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) - 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) Proporcionar una ruta relativa (de alguna manera) para el CFC extender.

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

Respuesta

10

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

CFC tomarán la ruta actual como una asignación relativa de la raíz, por lo que si sus CFC están todos en el mismo directorio, se puede decir simplemente

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

O si sus componentes están en subdirectorios desde el actual de CFC, se puede acceder a ella:

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

en segundo lugar, si está ejecutando en ColdFusion 8, se puede definir una asignación en su Application.cfc usando las asignaciones de estructura desea:

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

Hay dos buenas referencias para Application.cfc, primero, Ray Camden's example Application.cfc que ofrece una buena vista de lo que ocurre, luego la página CF8 Live Docs application settings, que tiene una sección de asignaciones junto con algunos buenos comentarios.

Finalmente, puede usar la asignación incorporada de su raíz web, por lo que si su aplicación está en un subdirectorio llamado "MiAplicación" fuera de la raíz web, su asignación de raíz será "MiAplicación".Digamos que se pone correctamente sus componentes en:

wwwroot\MyApp\com\MyApp\example.cfc 

La asignación a este CFC en este caso será:

MyApp.com.MyApp.Example 

y utilizar el ejemplo, se puede extender de esta manera:

<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 tendrá que establecer una asignación en la CF Administra colina.

+0

Es this.mappings dentro de Application.cfc solo para CF 8, tiene enlaces de doc. – DEfusion

+0

Agregué algunos enlaces de referencia a la 2da sección debajo del ejemplo. –

+0

El enfoque de mapeo de aplicaciones se mece. Arregla uno de los últimos grandes obstáculos para usar componentes mecanografiados. – anopres

2

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

He encontrado 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".

+0

Sí que pensé tanto, el problema es que quiero ser capaz de cambiar la asignación se utiliza dependiendo de qué sitio se está ejecutando bajo. – DEfusion

2

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

si desea utilizar rutas de acceso relativas para extender las aplicaciones, pero tiene que iniciarlas con un "/.". Por ejemplo, puede hacer esto a extender una Application.cfc desde su raíz Web en directorio que aparece a Webroot:

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

Ahora digamos que tengo los siguientes caminos en mi solicitud:

[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 /2/application.cfc [Webroot] es la siguiente:

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

esperanza que esto tiene sentido.

0

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 (el archivo de componente base)
  • /pathtoworkingcfc/function.cfc (el archivo con el atributo se extiende)
  • /pathtoworkingcfc/basecomponent_extend.cfc (el nuevo archivo que se hacer lo que se extiende)

/somepathtobasecomponent/basecomponent.cfc

No hay nada que cambiar aquí . Esto permanece igual.

/pathtoworkingcfc/function.cfc

en la etiqueta cffunction establezca la extiende a extends="basecomponent_extend"

/pathtoworkingcfc/basecomponent_extend.CFC

contenido del archivo Sole es un cfinclude

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