使用Doctrine,是否可以使用魔术方法映射到实际上不存在的属性?
我正在使用YAML进行映射。
例如,如果我想映射到一个名为"demo“的属性,但是SomeClass::$demo实际上并不存在。我希望结合使用__get()、__set()、__isset()和__call()来处理$demo (以及getDemo()和setDemo()),并用它们做其他事情。
我试着设置它,但是我得到了一个错误:
Uncaught exception 'ReflectionException' with message 'Property My\Bundle\DemoBundle\Entity\SomeClass::$demo does not exist'
我不确定ReflectionProperty是否有什么特殊之处,导致它错过了我的魔术方法,或者我可能错过了魔术函数。然而,据我所知,ReflectionProperty应该与他们交互。
有什么想法吗?
更新:
经过进一步的研究,看起来ReflectionProperty构造函数将抛出一个异常,并且不会触发魔术方法。
还有谁知道将Doctrine映射到动态属性的方法?
谢谢。
更新2:
来举例说明我正在努力实现的目标。
基本上,我有一个通用的User
对象,它只包含处理用户身份所需的基本属性(角色、密码、盐、用户名等)。但是,我希望能够扩展此对象以添加特定于应用程序和用户的元数据。
所以,假设我创建了一个论坛包。然后,我可以动态地连接与用户相关的元数据,以便与论坛一起使用。我不想把它直接放在用户包中,因为这样用户包就不那么灵活了。
如果我能以某种方式将新数据动态注入到用户中,那么这些数据就可以在用户的单个查询中加载,而不是必须在单独的查询中加载。我知道还有一些其他的方法可以做到这一点,我已经探索过了,甚至在有限的范围内使用过。然而,如果我可以动态地创建这些关联,那就更好了,这真的不应该是那么困难的一步。
发布于 2013-08-08 15:33:49
如果您不需要搜索这些动态属性,那么只需将一个名为data的属性添加到您的实体中,并将其映射到doctrine数组类型。现在做你的主要工作,并将动态属性存储在数据数组中。
第二种方法可能是这样的:http://symfony.com/doc/current/cookbook/doctrine/resolve_target_entity.html。对于每个安装,您可以为管理员提供一个自定义实体。
但是,只要您不需要直接查询动态属性,那么第一种方法就可以很好地工作。
https://stackoverflow.com/questions/18115914
复制