я подумал о другом способе, который мог бы работать.
Setup OnMissingMethod что-то вроде этого:
<cffunction name="onMissingMethod">
<cfargument name="missingMethodName" type="string">
<cfargument name="missingMethodNameArguments" type="struct">
<cfset var tmpReturn = "">
<cfset var functionToCallName = "Hidden" & Arguments.missingMethodName>
<cfset arguments.missingMethodArguments.calledMethodName = Arguments.missingMethodName>
<cfinvoke method="#functionToCallName#" argumentcollection="#Arguments.missingMethodArguments#" returnvariable="tmpReturn" />
<cfreturn tmpReturn>
</cffunction>
Затем название каждого из обычных методов с префиксом («Hidden» в данном примере), и пометить их как частные. Так что мой первоначальный пример стал бы:
<cffunction name="HiddenisUsernameAvailable" access="private">
<cfset logAccess(request.userid,Arguments.calledMethodName)>
......
</cffunction>
Теперь все звонки будут перехвачены onMissingMethod, который добавит имя метода к аргументам, которые получают передаваемые в режиме реального метода.
Недостатки, которые я вижу, это то, что интроспекция перестает работать должным образом, и вы должны использовать именованные аргументы для вызова всех ваших функций. Если вы не используете именованные аргументы, аргументы будут случайным образом изменять порядок в структуре missingMethodNameArguments.
Хороший звонок на холодном приводе, но вы бы подумали, что это будет не так сложно. – ethyreal