Почему мой cfc coldfusion не может получить доступ к udf, включенному в application.cfm?

У меня есть функция ведения журнала (не могу использовать cflog), включенная в application.cfm, и мои страницы .cfm могут получить к ней доступ, но любые компоненты, которые я использую, выдают мне «Переменная LOGGER не определена». ошибка.

приложение.cfm

<cfinclude template="logging.cfm">

logging.cfm

<cffunction name="logger" >
 ...
</cffunction>

Любые идеи относительно того, что я делаю неправильно?


person blank    schedule 21.07.2009    source источник


Ответы (1)


потому что компонент работает так, что компонент не может видеть область "variables" вне себя, и когда вы <cfinclude> logging.cfm, он включает эти функции в область переменных страницы. чтобы ваш компонент вызывал эти функции, вы можете сделать это:

<cfinclude template="logging.cfm">

<cfset request.logger = variables.logger>

а затем в вашем <cfcomponent> вы можете позвонить request.logger(whatever).

Но, честно говоря, мне это кажется обратным. Вместо этого, почему бы не использовать Logger.cfc, который содержит функцию с именем «log», а затем, когда вы хотите что-то записать в журнал, вы просто делаете:

<cfinvoke component="my.Logger" method="log" message="#mylogmessage#">
person marc esher    schedule 21.07.2009
comment
спасибо, это ясно, но да, последняя часть вашего ответа, похоже, была пропущена - person blank; 22.07.2009
comment
Я сделал недостающую часть видимой. +1 к ответу. - person Tomalak; 22.07.2009