ColdFusion 9 ORM - 以低级别保护对象

时间:2009-09-10 01:01:36

标签: orm coldfusion coldbox

我正在考虑在我的模型中保护一个低级别对象(一个“成员”对象),所以默认情况下只能从中访问某些信息。

这是一种可行的方法(该死的性感,如果能起作用的话!):

1)添加一个名为“locked”的属性 - 默认为对象本身的“true”。

看来,执行此操作的唯一选项,而不是将其绑定到db表列,是使用带有查询的公式属性。所以默认锁定为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>

刚挂!似乎尝试设置使用“公式”定义的属性是禁止的。

有什么想法吗?我们可以将任何其他方式附加到ORM对象的属性是可获取和可设置的,而不会出现在数据库中吗?

赞赏的想法!

2 个答案:

答案 0 :(得分:1)

  

我们可以拥有任何其他方式的属性   附加到ORM对象   没有它们可以得到和设定   存在于db?

是的,

<cfproperty name="locked" persistent=false>

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

答案 1 :(得分:0)

是因为在你的函数的else语句中,你再次调用相同的函数名吗?所以它只是反复出现。

尝试重命名函数名称,使其不会覆盖隐式getter,看看会发生什么。例如

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

</cfscript>