我的代码是:
$record = $em->getRepository('AcmeDemoBundle:Venues')->find($id);
$reflect = new \ReflectionClass($record);
$props = $reflect->getProperties();
$ props是一个包含24个ReflectionProperty对象的数组,与Venues类的24个属性相关。这是预期的行为。
当我执行相同的代码和$ id = 2时出现问题,虽然$ reflect对象似乎是相同的,现在$ props数组只包含3个奇怪的ReflectionProperty,其名称为_entityPersister,_identifier和 isInitialized
我更改了桌面上ID为2的记录上的所有值,以便镜像其他正常工作。它没有帮助。
我认为我错过了一些重要的东西,但我不知道它到底是什么。请帮忙;)
PD: 我包括以下重要代码: 树枝阵列扩展:
public function arrayFilter($entity) {
$fieldnames = $this->container->getFieldnames($entity);
if (is_object($entity)) {
$response = (array) $entity;
$i = 0;
foreach ($response as $k => $v) {
unset($response[$k]);
$new_key = $fieldnames[$i];
$response[$new_key] = $v;
$i++;
}
return $response;
}
return null;
}
使用此功能:
public function getFieldnames($record) {
$reflect = new \ReflectionClass($record);
$props = $reflect->getProperties();
$fieldnames = Array();
foreach ($props as $prop) {
$fieldnames[] = $prop->getName();
}
return $fieldnames;
}
答案 0 :(得分:1)
您正在对Doctrine Proxy类进行反思。 Doctrine在内部使用代理,以提供热切的水合作用和其他功能。在对您正在使用的实体进行基本使用时,这是透明的,但如果使用反射或转储变量,您将看到各种代理属性和方法。
我的建议是,不要在代理上使用反射,但如果你真的需要,请告诉学说急切地获取你的实体。这样做会阻止代理机制生效并污染您的实体。