这些属性在您的 Animal 类中是私有的。我刚刚做了类似的事情,但是您需要使用元数据来获取postLoad
方法中的对象属性。
$MetaData = $em->getClassMetadata(get_class($entity));
然后,您可以使用以下命令获取所有字段名称(格式正确,不带“_”)
foreach (array_keys($MetaData->reflFields) as $value) {
}
为了使用这些字段的吸气剂,您可以这样做:
//this will become $entity->getSomeFieldValue()
//it will eval to false if this doesn't exist
if ($entity->{'get' . ucfirst($value)}()) {}
您的整个代码将类似于:
//Your listener class
private $reg;
public function __construct(Registry $reg) {
$this->reg = $reg;
}
public function postLoad( LifecycleEventArgs $eventArgs ){
$entity = $eventArgs->getEntity();
$em = $this->reg->getManager();
$MetaData = $em->getClassMetadata(get_class($entity ));
foreach (array_keys($MetaData->reflFields) as $value) {
if ($entity->{'get' . ucfirst($value)}()) {
//here you can get the $entity->someGetter() values
}
}
}
在你的 service.yml 你会做:
arguments: ['@doctrine']
tags:
- { name: doctrine.event_listener, event: postLoad }
请记住,除非您将父类变量切换为,否则protected
没有private
真正的方法可以直接读取它们。如果您需要任何澄清,请告诉我,但是这种带有元数据的方法对我来说效果很好。它还为您提供关联