Где хранить общие функции в ColdFusion
Мы работаем с ColdFusion MX7.
Одна из проблем, с которыми мы сталкиваемся, заключается в том, что у нас много функций, которые мы используем на многих наших страницах. Было бы неплохо, чтобы они жили в "глобальной" области ColdFusion, а не включали их на всех наших страницах.
Есть ли способ сделать это, который не включает в себя пользовательские теги или тому подобное?
Я знаю, что мы могли бы прикрепить некоторые объекты к областям применения или сервера, но тогда мы должны ссылаться на них как таковые.
Простое добавление их в глобальную область было бы идеально.
РЕДАКТИРОВАТЬ
Благодаря предложениям, вот что я придумал. По сути, для каждого запроса в функции OnRequestStart присвойте переменной с правильно заданным именем в клиентской области ссылку на функцию (this.functionName).
Application.cfc:
<cfcomponent OUTPUT="FALSE">
<cfset This.name = "MyApp">
<CFSET This.clientManagement = true>
<CFSET This.SessionManagement = true>
<CFFUNCTION NAME="Coalesce" OUTPUT="FALSE" access="public">
<CFARGUMENT NAME="ARG1">
<CFARGUMENT NAME="ARG2">
<CFIF ARG1 NEQ "">
<CFRETURN ARG1>
<CFELSE>
<CFRETURN ARG2>
</CFIF>
</CFFUNCTION>
<cffunction name="onRequestStart">
<CFSET CLIENT.COALESCE = this.COALESCE>
</cffunction>
</cfcomponent>
Страницы, которые находятся под этим приложением, с радостью отвечают на звонок:
<CFOUTPUT>#COALESCE("ONE","TWO")#</CFOUTPUT>
Работает отлично!
3 ответа
Там нет такого понятия, как "глобальный охват".
Если вы говорите о области видимости переменных на каждой странице, вы можете попробовать включить UDF в Application.cfm.
Если вы используете Application.cfc, найдите onRequest() в документе CF7.
Один из вариантов, который меня порадовал, - это создать сервисный (или похожий) компонент в Application.cfc. Добавьте все свои функции к этому компоненту и создайте его при создании приложения. Это уменьшит время загрузки, так как функции кэшируются в приложении, а также сделает функции доступными для любого файла в этом приложении. Конечно, тогда вы должны будете вызвать функцию, такую как application.services.myUsefulFunction()
Проверьте этот аналогичный пост. Это отлично сработало для меня...