php - 我可以仅使用 getter 填充 Sonata 实体导出吗?
问题描述
我正在为一家使用 Sonata 的媒体公司构建一个非常简单的计费系统,其中包括用于支付记者的支付实体。付款的唯一目的是导出到电子表格。我们永远不会直接编辑付款。
我的付款实体中有一堆特殊的吸气剂,它们不直接对应于该实体的属性。像这样的东西:
public function getReporterName():string
{
return
$this->reporter->getUser()->getFirstname() .
' ' .
$this->reporter->getUser()->getLastname()
;
}
在这个实体的奏鸣曲管理类中,我告诉我的列表视图显示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'])
;
}
推荐阅读
- windows-10 - 通过 CRAN 安装 IRkernel 可以在我的 conda 环境中工作吗?
- selenium-webdriver - 我们如何清除用于 Selenium 自动化的 Internet Explorer 的 cookie
- dialogflow-es - 响应后在谷歌操作中禁用麦克风
- node.js - 完成安装后 IPFS 无法在浏览器上运行
- vim - 在 Vim 中,如何设置在插件加载后运行的自动命令?
- javascript - 如何在 if 语句中使用按钮值和对象值来检查正确答案(进行测验)
- javascript - 如何在每次使用 jQuery 或 javascript 的下午 6:30 之后在 datepicker 中禁用今天的日期
- python - 如何使用正则表达式和精确文字匹配的组合来获取索引值
- popup - 如何在弹出窗口中显示最新数据
- firebase - Flutter_facebook_plugin 上的问题