【问题标题】:我可以仅使用 getter 填充 Sonata 实体导出吗?
【发布时间】:2021-07-02 11:08:57
【问题描述】:

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

我的 Payment 实体中有一堆特殊的 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')
    ;
}

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

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

有没有办法做我想做的事情?或者我是否只需将其吸收并复制数据库中的一些数据才能使我的导出工作?

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

【问题讨论】:

    标签: php symfony doctrine sonata-admin sonata


    【解决方案1】:

    我最终使用专用的导出方法来解决这个问题。

    https://symfony.com/doc/current/bundles/SonataAdminBundle/reference/action_export.html

    【讨论】:

      【解决方案2】:

      我认为您无法使用两个字段(除非您为 full 名称添加 mapped 字段)。
      你可以use the dot syntax to filter by sub entity properties:

      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'])
          ;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-12-12
        • 2016-02-23
        • 2011-06-22
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        • 1970-01-01
        • 2016-12-05
        • 1970-01-01
        相关资源
        最近更新 更多