継承した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
内
のすべてのフォーム入力のデフォルト値を宣言することについてはよくわかりません。この中央ハンドラーを介してすべてのユーザー関連のフォーム送信を実行したい場合、これを行うためのより良い方法はありますか?