首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Doctrine2通过魔术方法定义属性

Doctrine2通过魔术方法定义属性
EN

Stack Overflow用户
提问于 2013-08-08 08:16:46
回答 1查看 593关注 0票数 1

使用Doctrine,是否可以使用魔术方法映射到实际上不存在的属性?

我正在使用YAML进行映射。

例如,如果我想映射到一个名为"demo“的属性,但是SomeClass::$demo实际上并不存在。我希望结合使用__get()、__set()、__isset()和__call()来处理$demo (以及getDemo()和setDemo()),并用它们做其他事情。

我试着设置它,但是我得到了一个错误:

代码语言:javascript
代码运行次数:0
运行
复制
Uncaught exception 'ReflectionException' with message 'Property My\Bundle\DemoBundle\Entity\SomeClass::$demo does not exist'

我不确定ReflectionProperty是否有什么特殊之处,导致它错过了我的魔术方法,或者我可能错过了魔术函数。然而,据我所知,ReflectionProperty应该与他们交互。

有什么想法吗?

更新:

经过进一步的研究,看起来ReflectionProperty构造函数将抛出一个异常,并且不会触发魔术方法。

还有谁知道将Doctrine映射到动态属性的方法?

谢谢。

更新2:

来举例说明我正在努力实现的目标。

基本上,我有一个通用的User对象,它只包含处理用户身份所需的基本属性(角色、密码、盐、用户名等)。但是,我希望能够扩展此对象以添加特定于应用程序和用户的元数据。

所以,假设我创建了一个论坛包。然后,我可以动态地连接与用户相关的元数据,以便与论坛一起使用。我不想把它直接放在用户包中,因为这样用户包就不那么灵活了。

如果我能以某种方式将新数据动态注入到用户中,那么这些数据就可以在用户的单个查询中加载,而不是必须在单独的查询中加载。我知道还有一些其他的方法可以做到这一点,我已经探索过了,甚至在有限的范围内使用过。然而,如果我可以动态地创建这些关联,那就更好了,这真的不应该是那么困难的一步。

EN

回答 1

Stack Overflow用户

发布于 2013-08-08 23:33:49

如果您不需要搜索这些动态属性,那么只需将一个名为data的属性添加到您的实体中,并将其映射到doctrine数组类型。现在做你的主要工作,并将动态属性存储在数据数组中。

第二种方法可能是这样的:http://symfony.com/doc/current/cookbook/doctrine/resolve_target_entity.html。对于每个安装,您可以为管理员提供一个自定义实体。

但是,只要您不需要直接查询动态属性,那么第一种方法就可以很好地工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18115914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档