ho pensato a un altro modo che potrebbe funzionare.
Setup un qualcosa OnMissingMethod come questo:
<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>
quindi denominare ciascuno dei metodi regolari con un prefisso ("Nascosto" in questo esempio), e contrassegnarli come privati. Quindi il mio primo esempio sarebbe diventato:
<cffunction name="HiddenisUsernameAvailable" access="private">
<cfset logAccess(request.userid,Arguments.calledMethodName)>
......
</cffunction>
Ora tutte le chiamate saranno intercettate da onMissingMethod, che aggiungerà il nome del metodo agli argomenti che vengono passati al metodo reale.
Gli svantaggi che vedo a questo sono che l'introspezione non funziona più correttamente, e devi usare gli argomenti con nome per chiamare tutte le tue funzioni. Se non si utilizzano argomenti con nome, gli argomenti modificano casualmente l'ordine nella struttura missingMethodNameArguments.
fonte
2009-02-22 19:28:16
buona chiamata sulla molla fredda, ma si potrebbe pensare che non sarebbe così complicato. – ethyreal