doctrine2代理对象上的反射



据我所见,像property_exists()这样的反射方法无法在doctrine2代理对象上工作。

在这种情况下,通过关系$user->getCity() 检索代理

在这种情况下,我如何检查是否存在/设置了属性?

解决方案是ReflectionClass::getParentClass()

所以像这样的代码应该可以工作:

$reflect = new ReflectionClass($proxyObject);
if ($proxyObject instanceof DoctrineCommonPersistenceProxy)
    // This gets the real object, the one that the Proxy extends
    $reflect = $reflect->getParentClass();
$privateProperty = $reflect->getProperty('privateProperty');
$privateProperty->setAccessible(true);
$privateProperty->setValue($proxyObject, $yourNewValue);

您可能需要检查代理是否首先初始化:

if (
    $entity instanceof DoctrineCommonPersistenceProxy
    && ! $entity->__isInitialized()
) {
    $proxy->__load();
}

这基本上强制加载代理:在那之后,一切都将像拥有原始实体的实例一样工作。

顺便说一句,公共财产目前不受ORM的支持,尽管该功能将在ORM 2.4原则中实施。这样,您就可以访问公共属性,而不用担心对象是否是代理。

相关内容

  • 没有找到相关文章

最新更新