1

使用 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对象,它只包含处理实际成为用户所需的基本属性(角色、密码、盐、用户名等)。但是,我希望能够扩展此对象以添加特定于应用程序和用户的元数据。

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

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

4

1 回答 1

0

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

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

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

于 2013-08-08T15:33:48.760 回答