tôi nghĩ một cách khác mà có thể làm việc.
cài đặt một cái gì đó OnMissingMethod như thế này:
<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>
Sau đó đặt tên mỗi người trong số các phương pháp thông thường với một tiền tố ("Hidden" trong ví dụ này), và đánh dấu chúng là tư nhân. Vì vậy, ví dụ ban đầu của tôi sẽ trở thành:
<cffunction name="HiddenisUsernameAvailable" access="private">
<cfset logAccess(request.userid,Arguments.calledMethodName)>
......
</cffunction>
Bây giờ tất cả các cuộc gọi sẽ được chặn bởi onMissingMethod, mà sẽ thêm tên phương pháp để các đối số mà có được truyền cho phương thức thực sự.
Những nhược điểm mà tôi thấy là sự mâu thuẫn này không còn hoạt động đúng cách nữa và bạn phải sử dụng các đối số được đặt tên để gọi tất cả các chức năng của mình. Nếu bạn không sử dụng các đối số được đặt tên, args sẽ ngẫu nhiên thay đổi thứ tự trong cấu trúc missingMethodNameArguments.
Nguồn
2009-02-22 19:28:16
cuộc gọi tốt trên coldspring, nhưng bạn sẽ nghĩ rằng nó sẽ không được phức tạp này. – ethyreal