Cfdump组件方法值,而不是组件结构

时间:2013-03-25 04:03:02

标签: coldfusion coldfusion-9

我最近开始使用cfc组件在Session变量中存储用户信息。我曾经将它们作为单个变量存储在Session中,例如Session.UserId,Session.Firstname或Session.Lastname。这个新组件很好地为我提供了一个组件,其中包含我需要的每个值的get方法(即Session.User.getUserId(),Session.User.GetName()等)。

但是当我为调试执行会话变量的cfdump时,它会显示对象结构的元数据。我想看看组件的get方法返回的值。有什么方法可以使用cfdump用对象元数据输出函数值吗?

3 个答案:

答案 0 :(得分:5)

<cfdump>不是魔术,只需输出你给它的值。由于您的CFC实例未公开反映这些值的任何公共属性,<cfdump>无法知道它们是什么。

如果您需要在一次点击中提取所有反映您以前会话范围的私有属性,那么您需要创建一个方法来执行此操作,然后<cfdump> 。 EG:

public struct function getVariables(){
    return  variables;
}

如果要进一步抽象出你想要的值,例如进入variables.sessionStuffvariables.sessionStuff.userIdvariables.sessionStuff.name等),那么写一个方法getSessionStuff(),返回{{1} }。

答案 1 :(得分:3)

  

使用cfdump通过对象元数据输出函数值的任何方法吗?

是的,使用访问者。

<cfcomponent accessors="true">
    <cfproperty name="userID">
    <cfproperty name="firstName">
    <cfproperty name="lastName">
</cfcomponent>

尝试<cfdump>此对象,您将看到属性值。

答案 2 :(得分:0)

不确定Adobe是否继续支持此功能,但在ColdFusion 8中,THIS范围内的任何变量都会自动被视为公开(因此在cfdump中可见),同时明确使用VARIABLES范围被认为是私人的(因此在cfdump中是不可见的)。这样,当您在组件中保留组件引用时,也可以避免堆栈溢出(cfdump用于递归地以无限循环结束它们)。但话又说回来:这可能是在ColdFusion 9及以上版本中修复的。