Forms 如何在Coldfusion中为特定类型的表单(用户交互等)设置全局表单处理程序?

Forms 如何在Coldfusion中为特定类型的表单(用户交互等)设置全局表单处理程序?,forms,coldfusion,process,application.cfc,Forms,Coldfusion,Process,Application.cfc,我正在寻找在继承的Coldfusion8站点中构造表单处理的最佳方法 有许多表单与某些交互相关,例如“用户交互”(注册/登录/注销/更新)。我已经设置了一个全局表单/验证处理程序 我对设置做了一些更改,因为我在使用Coldfusion的头几个月,我想知道以下处理方式是否有意义: 在我的应用程序.cfc中,我为所有“用户交互表单”声明会话默认值,如下所示: ... Session.FormData.User={ 用户名=”, 密码=”, iln=“”, 公司名称=”, 地址=”, ... for

我正在寻找在继承的Coldfusion8站点中构造表单处理的最佳方法

有许多表单与某些交互相关,例如“用户交互”(注册/登录/注销/更新)。我已经设置了一个全局表单/验证处理程序

我对设置做了一些更改,因为我在使用Coldfusion的头几个月,我想知道以下处理方式是否有意义:

在我的应用程序.cfc中,我为所有“用户交互表单”声明会话默认值,如下所示:


...
Session.FormData.User={
用户名=”,
密码=”,
iln=“”,
公司名称=”,
地址=”,
...
formsubmitted=“”
}
其想法是为所有表单字段设置默认值,因此无论用户是简单登录还是注册,我都会提交“完整表单”

然后在我的用户表单处理程序.cfc中声明验证标准:

 <cfcomponent extends="controllers.form_switch" output="false" hint="Utility for handling all user-related forms">     
    <cfscript>
        <!--- declare validation methods --->
        VARIABLES.Instance.Validation = {
            username = "string|len_6", 
            password="string|len_6",
            iln="spec_iln",
            ...
            companyname="string",
            address="string",
            formsubmitted="pass"
            }
        <!--- grab default values from Session --->
        VARIABLES.Instance.FormData = SESSION.FormData.User;
     </cfscript> 

     <!--- SET FORM DATA --->
     <cffunction name="SetFormData" access="public" returntype="void" output="false">
        <cfargument name="FormData" type="struct" required="true" hint="Form data" />
            <!--- overwrite default values with values passed in form submisson. --->
            <cfset VARIABLES.Instance.FormData = ARGUMENTS.FormData />
        <cfreturn />
    </cffunction>

    <!--- PROCESS --->
    <cffunction name="Process" access="remote" returntype="struct" output="false" hint="Process">

        <cfset var LOCAL = {} />
        <cfset LOCAL.Response = { Success = true, Errors = [], Data = "" } />
        <!--- call setFormData to overwrite defaults with submitted values --->
        <cfif IsStruct( ARGUMENTS[ 1 ] )>
            <cfset THIS.SetFormData( ARGUMENTS[ 1 ] ) />
        <cfelse>                
            <cfset THIS.SetFormData( ARGUMENTS ) />             
        </cfif> 
        ... validation/commit
        <cfreturn LOCAL.Response />
    </cffunction>

VARIABLES.Instance.Validation={
username=“string | len_6”,
password=“string | len_6”,
iln=“spec\u iln”,
...
companyname=“string”,
address=“string”,
formsubmitted=“通过”
}
VARIABLES.Instance.FormData=SESSION.FormData.User;
... 验证/提交
每当我提交一个与用户相关的表单时,我都会提交到user-form-handler.cfc中的PROCESS函数,该函数会覆盖在SETFORMDATA中设置的会话默认值,然后在提交到数据库并返回响应对象之前验证表单字段

我的问题:

虽然这样做有效,但我不确定是否要为我的Application.cfc中的onSessionstart中的所有表单输入声明默认值。当我想通过这个中央处理程序运行所有与用户相关的表单提交时,有没有更好的方法来实现这一点?

如果您不更改任何表单提交默认值,那么(例如,设置一个表单变量,用谷歌搜索术语来表示登陆页面,或者任何其他将改变这些变量变成空白的东西),你可以只接受空白字段和/或在处理.CFC中声明缺省值。缺少字段和设置默认值。然后是一个单独的函数,用于验证数据。

如果您不更改行中的任何表单提交默认值(例如,设置一个表单变量,用谷歌搜索术语来表示登陆页面,或者任何其他将改变这些变量变成空白的东西),你可以只接受空白字段和/或在处理.CFC中声明缺省值。缺少字段和设置默认值。然后使用单独的函数验证数据

 <cfcomponent extends="controllers.form_switch" output="false" hint="Utility for handling all user-related forms">     
    <cfscript>
        <!--- declare validation methods --->
        VARIABLES.Instance.Validation = {
            username = "string|len_6", 
            password="string|len_6",
            iln="spec_iln",
            ...
            companyname="string",
            address="string",
            formsubmitted="pass"
            }
        <!--- grab default values from Session --->
        VARIABLES.Instance.FormData = SESSION.FormData.User;
     </cfscript> 

     <!--- SET FORM DATA --->
     <cffunction name="SetFormData" access="public" returntype="void" output="false">
        <cfargument name="FormData" type="struct" required="true" hint="Form data" />
            <!--- overwrite default values with values passed in form submisson. --->
            <cfset VARIABLES.Instance.FormData = ARGUMENTS.FormData />
        <cfreturn />
    </cffunction>

    <!--- PROCESS --->
    <cffunction name="Process" access="remote" returntype="struct" output="false" hint="Process">

        <cfset var LOCAL = {} />
        <cfset LOCAL.Response = { Success = true, Errors = [], Data = "" } />
        <!--- call setFormData to overwrite defaults with submitted values --->
        <cfif IsStruct( ARGUMENTS[ 1 ] )>
            <cfset THIS.SetFormData( ARGUMENTS[ 1 ] ) />
        <cfelse>                
            <cfset THIS.SetFormData( ARGUMENTS ) />             
        </cfif> 
        ... validation/commit
        <cfreturn LOCAL.Response />
    </cffunction>