0

モデル内の低レベルのオブジェクト (「メンバー」オブジェクト) を保護することを検討しているため、デフォルトではそこから特定の情報のみにアクセスできます。

考えられるアプローチは次のとおりです(機能する場合はセクシーです!):

1) オブジェクト自体に「locked」というプロパティを追加します。デフォルトは「true」です。

これを行うための唯一のオプションは、クエリを受け取る式属性を使用することです。したがって、デフォルトで TRUE にロックするには、次のようにします。

<cfproperty name="locked" formula="select 1" />

2) 次に、これを使用するために既存の set-ers と get-ers を上書きします。

<cffunction name="getFullname" returnType="string"> 
    <cfscript>
        if (this.getLocked()) {
            return this.getScreenName();
        } else {
            return this.getFullname();
        }

    </cfscript>
</cffunction>

3) このように使用すると:

<p> #oMember.getFullName()# </p>

ScreenName を表示します (すばらしい!)

しかし...私がこれを行うとき:

<cfset oMember.setLocked(false)>
<p> #oMember.getFullName()# </p>

ハングアップするだけです!!! 「式」を使用して定義されたプロパティを設定しようとすることは、禁止されているようです。

何か案は?db に存在しなくても、取得および設定可能なプロパティを ORM オブジェクトにアタッチする他の方法はありますか?

アイデアを歓迎します!

4

2 に答える 2

1

データベースに存在しなくても、取得および設定可能なプロパティをORMオブジェクトにアタッチする他の方法はありますか?

はい、

<cfproperty name="locked" persistent=false>

http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSB7BEC0B4-8096-498d-8F9B-77C88878AC6C.html

于 2009-09-10T01:14:49.623 に答える
0

関数のelseステートメントで、同じ関数名を再度呼び出しているためですか?だからそれはただ繰り返されます。

関数名の名前を変更して、暗黙的なゲッターをオーバーライドしないようにして、何が起こるかを確認してください。例えば

<cffunction name="getNewname" returnType="string"> 
<cfscript>
    if (this.getLocked()) {
        return this.getScreenName();
    } else {
        return this.getFullname();
    }

</cfscript>

于 2011-06-24T09:05:50.647 に答える