我正在为一家使用Sonata的媒体公司构建一个非常简单的计费系统,该系统包括用于向记者付费的支付实体。付款的唯一目的是导出到电子表格中。我们永远不会直接编辑付款。
我的支付实体中有一堆特殊的getter,它们与该实体的属性不直接对应。像这样的东西:
public function getReporterName():string
{
return
$this->reporter->getUser()->getFirstname() .
' ' .
$this->reporter->getUser()->getLastname()
;
}
在这个实体的Sonata管理类中,我告诉我的列表视图显示reporterName
,就好像它是一个属性一样。Sonata足够聪明,可以找到并使用getter来检索我正在查找的字符串。没问题。
当我将伪字段名添加到configureDatagridFilters((方法中时,问题就来了,如下所示:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('id')
->add('paymentComplete')
->add('reporterName')
;
}
现在我在尝试导出电子表格时收到一条讨厌的消息,上面写着:
未找到属性的元数据CCD_ 2。请确保条令映射配置正确。
有办法做我在这里要做的事情吗?或者我只需要吸取它并在数据库中复制一些数据就可以进行导出了
如果有帮助的话,我将在这里重申,我们仅需要此实体来导出到电子表格。它永远不会被手动编辑。
我认为您一直在使用两个字段(除非您为完整名称添加映射字段(
您可以使用点语法按子实体属性进行筛选:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('id')
->add('paymentComplete')
->add('reporter.user.firstname', null, ['label' => 'Reporter Firstname'])
->add('reporter.user.lastname', null, ['label' => 'Reporter Lastname'])
;
}
我最终使用了专用的导出方法来解决这个问题。
https://symfony.com/doc/current/bundles/SonataAdminBundle/reference/action_export.html