我可以只使用getter来填充Sonata实体导出吗



我正在为一家使用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

相关内容

  • 没有找到相关文章

最新更新