我想编写一个服务器端验证代码来验证我页面上的所有用户输入。我想从表示层保留所有这些服务器端验证。现在我正在研究创建一个组件并保留其中的所有验证功能。我将使用 <cfinvoke>
标记访问我的用户页面上的验证方法。但问题是我必须对大约50个用户输入应用验证,并且需要使用<cfinvoke>
标记50次。任何人都可以告诉我多次使用 <cfinvoke>
会影响效果,还是有其他更好的方法可供选择?
答案 0 :(得分:3)
使用<cfinvoke>
没有明显的开销。但我仍然建议你在这里避免它。而是考虑这个(例子):
Validator.cfc
<cfcomponent>
<cffunction name="validateX" access="public" ...>
...
</cffunction>
<cffunction name="validateY" access="public" ...>
...
</cffunction>
<cffunction name="validateZ" access="public" ...>
...
</cffunction>
</cfcomponent>
controller.cfm
<cfset validator = new Validator()>
<cfset validator.validateX(...)>
<cfset validator.validateY(...)>
<cfset validator.validateZ(...)>
...
现在您可以轻松使用验证结果。
如果你返回boolean:
<cfif validator.validateX(...)>
...
<cfelse>
...
</cfif>
如果返回包含错误的数组:
<cfset errors = []>
<cfset errors.addAll( validator.validateX(...) )>
<cfset errors.addAll( validator.validateY(...) )>
<cfset errors.addAll( validator.validateZ(...) )>
等
<cfinvoke>
创建类的实例(new Validator()
)并以相同的方式调用方法validateX(...)
。主要区别在于:实例是每次<cfinvoke>
创建的,并且返回必须指定为输入变量(returnVariable
),这在大多数情况下都很麻烦。