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

时间:2012-06-02 20:07:08

标签: forms coldfusion process application.cfc

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

有许多与某些交互相关的表单,例如“用户交互”(注册/登录/注销/更新)。我已经在这个example上设置了一个全局表单/验证处理程序,它可以正常工作。

我已经改变了设置,因为我在使用Coldfusion的前几个月我想知道,如果以下处理事情的方式有意义:

在我的 application.cfc 中,我正在声明所有“用户互动表单”的会话默认值,如下所示:

<cffunction name="onSessionStart" returnType="boolean" output="false" hint="session initalizer">
    ...
    Session.FormData.User = {
        username="", 
        password="", 
        iln="", 
        companyname="",
        address="",
        ...
        formsubmitted=""
        }
</cffunction>

我们的想法是为所有表单字段设置默认值,因此无论用户是仅登录还是注册,我都会提交“完整表单”。

然后在我的 user-form-handler.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>

每当我提交用户相关表单时,我都会提交到user-form-handler.cfc中的 PROCESS 函数,该函数会覆盖 SETFORMDATA 然后在提交到数据库并返回响应对象之前验证表单字段。

我的问题
虽然这有效,但我不确定在Application.cfc中的 onSessionstart 中声明所有表单输入的默认值。当我想通过这个中央处理程序运行所有与用户相关的表单提交时,有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

如果您没有在该行的任何位置更改任何表单提交默认值(例如设置一个表单变量,指示着陆页以及Google搜索字词或其他任何可能会将这些变量更改为空白之外的内容)您可以只接受空白字段和​​/或在处理.cfc中声明默认值。我通常有一个功能,“填充”缺少的字段并设置默认值。然后是一个验证数据的单独函数。