我尝试使用MetadataFetature确定表的主键。但是,数据在受保护的$ sharedData内,没有任何访问方法。如何加入他们?我是否只是为了添加" getPrimary"而创建新课程?方法?
在AbstractTableGateway子项中:
$metadata = $this->getFeatureSet()->getFeatureByClassName('Zend\Db\TableGateway\Feature\MetadataFeature');
die(vardump($this->sharedData));
获得
Invalid magic property access in Zend\Db\TableGateway\AbstractTableGateway::__get()
答案 0 :(得分:0)
您只需要声明 FeatureSet 的后代,以及 MetadataFeature 的后代。
在您自己的 FeatureSet 中,覆盖功能 canCallMagicGet 。 这是我如何做到的一个例子
public function canCallMagicGet($property)
{
if ($property == 'metadata'){
$result = $this->getMetadataFeature();
return ($result!==FALSE);
}
else return parent::canCallMagicGet($property);
}
就我而言, getMetadataFeature 会返回在FeatureSet类继承的受保护属性$ feature中找到的首次出现的MetadataFeature实例( instanceof )。
您也可以覆盖第二种方法 callMagicGet 。 以下是一个例子:
public function callMagicGet($property)
{
if ($property == 'metadata'){
$metadataFeature = $this->getMetadataFeature();
return $metadataFeature->metadata;
}
else
return parent::callMagicGet($property);
}
最后,您可以在自己的 MetadataFeature 中声明魔术方法 __ get 。您的 __ get 可以直接从受保护的属性 $ sharedData 返回元数据。
总之,一旦声明了自己的 FeatureSet 和 MetadataFeature 后代,就可以使用它们而不是当前的。 然后你可以打电话
$tableGatewayInstance->metadata
并且 MetadataFeature 收集的元数据将可供您使用。
干杯