Я не тестировал этот код, но вы видите процедурный порядок операций, выполняемых Application.cfm
. По сути, вы переопределяете приложение при каждом запросе, поэтому имя существует в вашем начальном дампе, а остальные присутствуют в дампе в onRequestEnd
.
Если вы обновите свой код для использования Application.cfc
, вы можете отказаться от кода cflock
, лучше организовать свои «триггеры» и определить переменные приложения один раз, когда это необходимо, используя onApplicationStart
.
<cfcomponent>
<cfset this.name = "Test App">
<cfset this.SETCLIENTCOOKIES="YES">
<cfset this.CLIENTMANAGEMENT="YES">
<cfset this.SESSIONMANAGEMENT="YES">
<cfset this.SESSIONTIMEOUT="#CREATETIMESPAN(0,8,0,0)#">
<cfset this.APPLICATIONTIMEOUT="#CREATETIMESPAN(1,0,0,0)#">
<cfsetting enablecfoutputonly="true" />
<cffunction name="onApplicationStart" access="public" returnType="void" output="false">
<cfset application.Email = "test@test.com">
<cfset application.DataSource="test">
</cffunction>
<cffunction name="onRequestStart" access="public" returntype="boolean" output="false">
<cfset application.one = 1>
<cfset application.two = 2>
<cfset application.three = 3>
<cfreturn true>
</cffunction>
<cffunction name="onRequestEnd" access="public" returntype="boolean" output="false">
<cfsetting showdebugoutput="false" />
<cfdump var="#application#" label="onRequestEnd">
<cfreturn true>
</cffunction>
</cfcomponent>
Это должно определить email
и datasource
в области приложения один раз, когда приложение загружается впервые. Переменные one
, two
и three
будут создаваться в начале каждого запроса, но вы можете добавить проверку, чтобы установить их, только если они еще не существуют.
Затем вы можете использовать дочерние Application.cfc
файлы, чтобы упростить модульную настройку вашего приложения, используя подпапки и переменные, специфичные для вложенных приложений. Они по-прежнему будут существовать в рамках более крупного приложения, но таким образом вы сможете управлять ими из местоположения, определенного для дополнительного приложения.