coldfusion scope global-variables application.cfc

coldfusion - Posible crear un global sin ámbito en application.cfc?



scope global-variables (3)

Necesitará tanto Application.cfc como Application.cfm. Mueva todo el código principal de Application.cfm a las partes adecuadas de Applicaiton.cfc.

Entonces, y esta puede ser la única línea, en Applicaiton.cfm:

<cfset variables.dsn = "myDSN" />

Ahora regrese a Application.cfc y agregue esto fuera de todas las funciones:

<cfinclude template="Application.cfm" />

En su test.cfm, ahora debería poder dar salida a la variable dsn sin el prefijo del alcance:

<cfoutput>#dsn#</cfoutput>

Si define variables.dsn en cualquier lugar dentro del CFC, está colocando la variable en el ámbito de variables del CFC, que es privado para el CFC. Al definirlo en el CFM, y luego incluir el CFM, se mantiene en el ámbito de variables de la solicitud de la página.

Estoy migrando una aplicación antigua que usa application.cfm para usar una aplicación.cfc. El CFM establece algunos globales como

<cfset dsn = "myDSN">

Intenté poner esa línea de código enApplicationStart, onRequestStart, etc., pero tratar de imprimir ese valor en una página de prueba da como resultado un error. Establecer un valor en el ámbito de la aplicación (por ejemplo, application.dsn) funciona bien, por supuesto, pero tengo una fecha límite ajustada y no puedo mover el barco haciendo una búsqueda en todo el sitio y sustituirlo por cada uno global.

Sé que poner estos en ámbitos es lo correcto, pero, por el momento, ¿hay alguna forma de cambiar a usar Application.CFC pero aún así crear variables globales no codificadas?


Habiendo luchado con esto yo mismo, te daré mi solución. Tenga en cuenta que esto funciona en CF9, no sé sobre otras versiones (hay un problema con las llamadas onRequest y AJAX en versiones anteriores). Básicamente, es necesario tener la función onRequest en su Application.cfc. Aquí hay una plantilla básica:

<cffunction name="onRequest" access="public" returntype="void" output="true"> <cfargument name="targetPage" type="string" required="true"> <!--- include the requested page. ---> <cfinclude template="#arguments.TargetPage#"> </cffunction> As far as I understand it: it''s actually the cfinclude that enables you to access the functions. So, with this onRequest in your Application.cfc you can access the ''this'' scope of the Application.cfc which would include your public functions & variables. If you want a more in depth example of this then check out Framework-1 by Sean Corfield. It does this exact thing, all API methods are contained in the Application.cfc.


Intenta ponerlo dentro de onRequest() lugar de onRequestStart() .