我正在寻找在我继承的 Coldfusion8 站点中构建表单处理的最佳方法。
有许多与某些交互相关的形式,例如“用户交互”(注册/登录/注销/更新)。我已经按照这个示例设置了一个全局表单/验证处理程序,它工作正常。
我已经稍微改变了设置,因为我是在使用 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
中为所有表单输入声明默认值。当我想通过这个中央处理程序运行所有与用户相关的表单提交时,有没有更好的方法来做到这一点?