ich einer anderen Art und Weise gedacht, die funktionieren könnte.
-Setup ein OnMissingMethod etwas wie folgt aus:
<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>
Dann mit einem Präfix jeder der regulären Methoden nennen („Hidden“ in diesem Beispiel), und sie als privat kennzeichnen. So würde mein erstes Beispiel werden:
<cffunction name="HiddenisUsernameAvailable" access="private">
<cfset logAccess(request.userid,Arguments.calledMethodName)>
......
</cffunction>
nun alle Anrufe von onMissingMethod abgefangen werden, die den Namen der Methode auf die Argumente werden hinzufügen, die auf die reale Methode übergeben bekommen.
Die Nachteile, die ich sehe, sind, dass Introspektion nicht mehr richtig funktioniert, und Sie müssen benannte Argumente verwenden, um alle Ihre Funktionen aufzurufen. Wenn Sie keine benannten Argumente verwenden, ändern die Argumente die Reihenfolge in der missingMethodNameArguments-Struktur nach dem Zufallsprinzip.
guten Ruf auf die Coldspring, aber Sie würden denken, es wäre nicht so kompliziert. – ethyreal