2017-10-29 6 views
2

私は、サーバー側の検証コードを書いて、自分のページ上のすべてのユーザー入力を検証したいと考えています。私はプレゼンテーション層からこれらのサーバー側検証をすべて保持したいと思います。今、私はコンポーネントを作成し、その内部にすべての検証関数を保持しています。私は<cfinvoke>タグを使用して、自分のユーザーページの検証方法にアクセスします。しかし、問題は約50ユーザーの入力にバリデーションを適用し、<cfinvoke>タグを50回使用する必要があることです。誰もが私に行くことができる<cfinvoke>何度もパフォーマンスに影響を与えるか、他のよりよいアプローチがあると私に言うことができますか?<cfinvoke>をColdFusionで使用

答えて

3

<cfinvoke>を使用すると、目に見えないオーバーヘッドはありません。しかし、私はまだここでそれを避けることをお勧めします。代わりに、この(例)考えてみます。

Validator.cfc

<cfcomponent> 

    <cffunction name="validateX" access="public" ...> 
     ... 
    </cffunction> 
    <cffunction name="validateY" access="public" ...> 
     ... 
    </cffunction> 
    <cffunction name="validateZ" access="public" ...> 
     ... 
    </cffunction> 

</cfcomponent> 

controller.cfm

<cfset validator = new Validator()> 

<cfset validator.validateX(...)> 
<cfset validator.validateY(...)> 
<cfset validator.validateZ(...)> 
... 

今すぐ簡単に検証結果を操作することができます。

あなたはブール値を返す場合:あなたがエラーで配列を返す場合

<cfif validator.validateX(...)> 
    ... 
<cfelse> 
    ... 
</cfif> 

を:

<cfset errors = []> 
<cfset errors.addAll(validator.validateX(...))> 
<cfset errors.addAll(validator.validateY(...))> 
<cfset errors.addAll(validator.validateZ(...))> 

など

<cfinvoke>は、クラス(new Validator())のインスタンスを作成し、起動します方法validateX(...)同様です。主な違いは、インスタンスが新規に<cfinvoke>に作成され、戻り値を入力変数(returnVariable)として指定する必要があります。これはほとんどの場合面倒です。

+0

ありがとうございました。 とあなたのやり方の違いを説明できますか?私はコールド・フュージョンに慣れています。あなたのやり方はより読みやすいようです。 –

+0

それは働いています。私はそれが好きでした –

+0

このアプローチはコールドフュージョン9で動作しますか? –

関連する問題