簡體   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