Получить имена функций, введенных в CFC? - PullRequest
2 голосов
/ 08 декабря 2011

Я использую технику, описанную в этом ответе , для управления библиотекой небольших служебных функций.(По сути, каждая функция загружается как «дополнение», используя cfinclude.)

Однако мне нужно знать имена функций, которые имеет объект (после создания экземпляра).cfdump на объекте показывает только функцию init, которая написана непосредственно в CFC.

Некоторые дополнительные сведения:

Я создаю объект в области приложения в OnApplicationStart ().

<cfset application.udfs=createObject("component","extensions.udfs").init()>

Однако, чтобы избавить разработчиков от необходимости постоянно писать application.udfs.foo(), я решил взять все функции и перенести их в область видимости переменных в OnRequestStart (), поэтомучто эти гипотетические разработчики могли просто написать foo().

<cfset foo=application.udfs.foo>

Очевидно, однако, что это должно быть динамичным и происходить для каждой из функций объекта, независимо от того, сколько их.Если я повторю эту строку для каждой функции, которую потерял все, что я получил, имея библиотеку, которая генерируется динамически.

Я подумал, что, возможно, я мог бы использовать цикл сбора, но это было недопустимо.Я вполне уверен, что есть способ получить список методов в объекте, но я пока не смог его найти.

Есть какие-нибудь подсказки?

Кстати, мой запасной вариантбудет скопировать объект application.udfs в локальный объект с красивым коротким именем (например, "u"), чтобы разработчики могли просто набрать u.foo(), поэтому нет необходимости предполагать, что если то, что я хочу сделать, может 'это будет сделано.

Ответы [ 3 ]

3 голосов
/ 08 декабря 2011

Это должно позволить вам импортировать все ваши файлы udf в область глобальных переменных:

StructAppend(variables, application.udfs);
1 голос
/ 12 декабря 2011

Вот еще один интересный вариант, предложенный Беном Наделем :

Проверьте подробности в своей записи в блоге: http://www.bennadel.com/blog/1776-Creating-Globally-Accessible-User-Defined-Functions-In-ColdFusion-Safer-Version-.htm

UDF.cfc

<cfcomponent
    output="false"
    hint="I define user defined functions.">

    <cffunction
        name="getMessage"
        access="public"
        returntype="string"
        output="false"
        hint="I return a test message.">

        <cfreturn "I am defined in the UDF component" />
    </cffunction>

</cfcomponent>

Application.cfc

<!--- Define the application. --->
<cfset this.name = hash( getCurrentTemplatePath() ) />
<cfset this.applicationTimeout = createTimeSpan( 0, 0, 5, 0 ) />


<!---
    Add all of our "global" methods to the URL scope. Since
    ColdFusion will automatically seach the URL scope for
    non-scoped variables, it will find our non-scoped method
    names.
--->
<cfset structAppend(
    url,
    createObject( "component", "UDF" )
    ) />

1 голос
/ 08 декабря 2011

Я думаю GetMetaData должно помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...