我想写一个服务器端验证代码来验证我页面上的所有用户输入。我希望将所有这些服务器端验证从表示层中保存下来。现在,我正在研究如何创建一个组件,并将所有的验证功能都保存在其中。我将使用<cfinvoke>标记来访问我的用户页面上的验证方法。但问题是,我必须对大约50个用户输入应用验证,并且需要使用<cfinvoke>标记50次。有人能告诉我,多次使用<cfinvoke>会影响性能,或者还有其他更好的方法可以使用吗?
发布于 2017-10-29 13:03:17
使用<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(...)>
...现在,您可以轻松地处理验证结果。
如果返回布尔值:
<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),这在大多数情况下是很麻烦的。
https://stackoverflow.com/questions/46999830
复制相似问题