我最近开始使用cfc组件在Session变量中存储用户信息。我曾经将它们作为单个变量存储在Session中,例如Session.UserId,Session.Firstname或Session.Lastname。这个新组件很好地为我提供了一个组件,其中包含我需要的每个值的get方法(即Session.User.getUserId(),Session.User.GetName()等)。
但是当我为调试执行会话变量的cfdump时,它会显示对象结构的元数据。我想看看组件的get方法返回的值。有什么方法可以使用cfdump用对象元数据输出函数值吗?
答案 0 :(得分:5)
<cfdump>
不是魔术,只需输出你给它的值。由于您的CFC实例未公开反映这些值的任何公共属性,<cfdump>
无法知道它们是什么。
如果您需要在一次点击中提取所有反映您以前会话范围的私有属性,那么您需要创建一个方法来执行此操作,然后<cfdump>
。 EG:
public struct function getVariables(){
return variables;
}
如果要进一步抽象出你想要的值,例如进入variables.sessionStuff
(variables.sessionStuff.userId
,variables.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及以上版本中修复的。