繁体   English   中英

我可以仅使用 getter 填充 Sonata 实体导出吗?

[英]Can I populate a Sonata entity export using only getters?

我正在为一家使用 Sonata 的媒体公司构建一个非常简单的计费系统,其中包括用于支付记者的支付实体。 付款的唯一目的是导出到电子表格。 我们永远不会直接编辑付款。

我的付款实体中有一堆特殊的吸气剂,它们不直接对应于该实体的属性。 像这样的东西:

public function getReporterName():string
{
    return
        $this->reporter->getUser()->getFirstname() .
        ' ' .
        $this->reporter->getUser()->getLastname()
        ;
}

在我的奏鸣曲管理员 class 中,我已经告诉我的列表视图显示reporterName就好像它是一个属性。 Sonata 足够聪明,可以找到并使用 getter 来检索我正在寻找的字符串。 没问题。

当我将该伪字段名称添加到 configureDatagridFilters() 方法时,问题就出现了,如下所示:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('id')
        ->add('paymentComplete')
        ->add('reporterName')
    ;
}

现在我在尝试导出电子表格时收到一条讨厌的消息,说:

找不到属性AppBundle\Entity\Payment::$reporterName的元数据。 请确保您的 Doctrine 映射配置正确。

有没有办法做我在这里想做的事情? 还是我只需要把它吸起来并在数据库中复制一些数据才能使我的导出工作?

如果有帮助,我将在这里重申,我们需要此实体来导出到电子表格。 它永远不会被手动编辑。

我认为您被困在使用两个字段(除非您为名添加映射字段)。
您可以使用点语法按子实体属性进行过滤

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM