1

これらのサーバー側のユーザー フィールドの検証を改善する方法はありますか?

<cfif Form.LoginName EQ ""><h1>Login Name is required.</h1></cfif>
<cfif Form.Password EQ ""><h1>Password is required.</h1></cfif>
<cfif Form.Password NEQ Form.PasswordConfirmation><h1>Password confirmation does not match Password.</h1></cfif>
<cfif Form.FirstName EQ ""><h1>First Name is required.</h1></cfif>
<cfif Form.LastName EQ ""><h1>Last Name is required.</h1></cfif>

<cfif Form.LoginName EQ "" OR Form.Password EQ "" OR Form.Password NEQ Form.PasswordConfirmation OR Form.FirstName EQ "" OR Form.LastName EQ "">
    <p>User has not been created</p>
    <p>You can use your browser's back button to keep form fields filled and try again.</p>
    <p><a href="users.cfm">Return to users list</a>.</p>
    <cfabort>
</cfif>
4

3 に答える 3

6

ビジネス ロジックをディスプレイに結合する方法には、少し不満があります。おそらく、 MVC懸念の分離について読むことから恩恵を受けることができます。

ロジックの観点からは、検証ルールは問題ないように見えますが、検証を 2 回行っています。これは過剰に思えます: 各要素、次にすべての要素です。これは、上で強調した問題の一部によるものです。

手続き的に考えるのをやめて、よりオブジェクト指向のやり方で考え、User.cfc の概念を定義し、ある種の検証サービス ( ValidateThisを参照) を用意することを考えます。またはそのようなもの。

最後に、これは実際にはスタック オーバーフローで最も適切に尋ねられる種類の質問ではありませんが、コード レビューには適しています。この質問に対する答えは 1 つではありません。そのため、人々は「主に意見に基づいている」という理由で終了することを提案する傾向があります。

また、これを「ColdFusion 10」ではなく単に「ColdFusion」として再タグ付けします。CF10 とは特に関係がなく、単なる CFML の質問です。「ColdFusion」とマークされているだけで、より多くの聴衆を獲得できます。

于 2013-08-04T13:31:45.027 に答える
2

これは別の方法です。良いかどうかは自分で決めることができます。

ステップ 1 - エラー メッセージ変数を作成します。

<cfset ErrorMessage = "">

ステップ 2 - チェックを行います。気に入らないものがある場合は、変数にテキストを追加してください。

<cfif len(trim(form.LoginName)) gt 0>
<cfset ErrorMessage &= "<h3>Login Name is required</h3>">
</cfif>
more checks

ステップ 3 - エラー メッセージ変数の長さを確認する

<cfif len(ErrorMessage) gt 0>
display it
<cfelse>
code for no errors
</cfif>

これらすべてに加えて、おそらく、ページ リクエストが実際にフォーム ページからのものかどうかを確認する必要があります。そのために cgi.http_referrer を使用できます。

もう一つ。このようにフォームページに戻るアンカータグの代わりに、

<p><a href="users.cfm">Return to users list</a>.</p>

ブラウザでページをリロードする必要がないように、javascript を使用できます。

<p><a href="javascript:history.back()">Return to users list</a>.</p>
于 2013-08-04T23:51:18.517 に答える