모든 안내에서 누락 된 정보는 변수 범위 지정이 작동하는 방식을 이해하기위한 제안이며 Application.cfc 이벤트 처리기가 함수를 선언 할 수있는 것과 아무 관련이 없다고 생각합니다.
Application.cfc 이벤트 처리기는 처음에 선언 된 항목에 마술 지속성을 부여하지 않습니다. 선언 된 변수 나 함수를 액세스 방법에 적합한 범위에 넣어 둘 필요가 있습니다. onRequestStart (또는 onRequest) 내에서 변수를 선언한다고해서 마술처럼 그 변수를 요청의 모든 항목에서 사용할 수있는 것은 아닙니다. 그리고 함수는 변수 일뿐입니다.
하나의 파일을 포함하는 경우 - 모든 변수 선언 (따라서 함수 선언)은 입력 범위에 관계없이 존재합니다. 함수를 선언하고 더 이상 아무것도하지 않으면 함수가 존재합니다 변수 범위에서만
모든 요청의 시작 부분에 만들어지는 Application.cfc 인스턴스 내의 메소드 인 onRequestStart()에서 함수를 선언하는 경우 해당 함수는 해당 CFC 인스턴스의 변수 범위에 저장됩니다 . 그리고 그 CFC 인스턴스의 수명만큼 오래 지속될 것입니다. onRequestStart()의 실행과 관련하여 CFC 인스턴스는 onRequestStart()를 실행하는 동안 지속됩니다. 그리 길지 않습니다. 한편
는 onRequest()는 (onRequestStart 같은()이다) 이벤트 핸들러는 이벤트
인터셉터입니다되지 않습니다 : 그것은
대신이 차단 이벤트의 일어난다. 일반적으로 onRequest()는 - 문자 그대로 - 요청되는 템플릿을 포함합니다. 따라서 요청 된 템플릿은 onRequest()를 통해 CFC 인스턴스와 동일한 메모리 공간에서 실행되므로 포함 된 템플릿은 CFC 인스턴스의 변수 범위를 공유하므로 변수 범위가 onRequest()로 제공됩니다. 따라서 onRequest()가 변수 범위에서 많은 함수를 선언하는 UDF 라이브러리를 포함하면 ... onRequest() 인터셉터에 포함 된 주 요청 파일과 동일한 변수 범위입니다. 파일을 포함한 다른 CFC 인스턴스 메소드와 동일합니다.
그래서 ... onRootStart()에서 함수로 가득 찬 파일을 포함시키는 것만으로도 원하는대로 수행 할 수 있습니다. OnRequest()에서 함수로 가득 찬 파일을 동등하게 포함하면 마법의 지속성이 부여되지 않고 변수 범위에만 들어갑니다. 즉, 요청한 템플리트와 템플리트에 포함 된 모든 템플리트에 액세스 할 수 있습니다. 요청에 사용 된 CFC 인스턴스가 아닌 사용자 정의 태그에서 사용할 수 없습니다.
요청 내에서 모든 코드에서 기능 (또는 "일부 기능")을 사용하려면 해당 기능을 요청 범위 (또는 다른 공유 범위)에 넣어야합니다. 이렇게하는 방법은 변수와 동일합니다 :
request.something = somethingElse;
그게 전부입니다. 그게 유일한 방법입니다. 기능이 가득 찬 파일을 포함시키는 것은 포함 방법에 상관없이 원하는 것을위한 완벽한 솔루션이되지 못합니다.
당신은 단지 어둠이있는 곳에 명확성을 제공했습니다. –