在ColdFusion中使用<cfinvoke>

时间:2017-10-29 11:51:55

标签: coldfusion coldfusion-9 coldfusionbuilder

我想编写一个服务器端验证代码来验证我页面上的所有用户输入。我想从表示层保留所有这些服务器端验证。现在我正在研究创建一个组件并保留其中的所有验证功能。我将使用 <cfinvoke> 标记访问我的用户页面上的验证方法。但问题是我必须对大约50个用户输入应用验证,并且需要使用<cfinvoke>标记50次。任何人都可以告诉我多次使用 <cfinvoke> 会影响效果,还是有其他更好的方法可供选择?

1 个答案:

答案 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),这在大多数情况下都很麻烦。