Symfony Sonata Admin Bundle — экспорт настраиваемых полей с шаблонами веток в XLS

Код

Код класса администратора My Sonata:

class UsersAdmin extends AbstractAdmin
{
.....
    protected function configureListFields(ListMapper $listMapper)
    {

        $listMapper
            ->add('getSummaryTimeInGame','string',[
                'label'    => 'Summary time in game',
                'template' =>'AdminBundle::get_summary_time_in_game.html.twig'
            ])
            ->add('getPercentTasksDone', 'string', [
                'label'    => 'Percents tasks done',
                'template' => 'AdminBundle::get_percent_tasks_done.html.twig'
            ])
    }

   public function getExportFields()
   {
       return [
            'Name'     => 'name',
            'Surname'  => 'surname',
            'Summary time in game' => 'getSummaryTimeInGame',
            'Percents tasks done'  => 'getPercentTasksDone',
       ];
   }

.....
}

Проблема

Поля getSummaryTimeInGame и getPercentTasksDone видны в представлении списка сетки данных, но при экспорте в XLS они остаются пустыми.

Как правильно указать эти поля при экспорте XLS?


person Dariusz Dzięgiel    schedule 17.04.2018    source источник
comment
И getSummaryTimeInGame, и getPercentTasksDone являются существующими методами в вашей связанной сущности?   -  person AirBair    schedule 25.04.2018
comment
@AirBair Эти методы не существуют в связанном объекте. Пользовательская логика для значений этих полей находится в шаблонах веток (задается как параметр «шаблон» в $ listMapper)   -  person Dariusz Dzięgiel    schedule 25.04.2018
comment
Вот почему это не работает! Действие экспорта не зависит от конфигурации списка. Значения в полях экспорта должны соответствовать имени атрибута или метода в связанном объекте. Согласно документу: sonata-project.org/bundles /admin/3-x/doc/ссылка/   -  person AirBair    schedule 25.04.2018
comment
@AirBar Итак, как включить пользовательское логическое значение в экспортируемые поля? Я хотел бы использовать свой сервис в шаблоне ветки, чтобы получить значение. Внедрение службы в Entity не является хорошей практикой.   -  person Dariusz Dzięgiel    schedule 25.04.2018


Ответы (1)


В вашей пользовательской сущности (сущность, связанная с этим классом администратора) создайте эти две функции.

public function getSummaryTimeInGame{
    // return the desired calculated value.
}

public function getPercentTasksDone(){
    // return the desired calculated value.
}

После этого экспортируйте свой лист и получите эти значения в файле.

person Muhammad Mannan Masood    schedule 06.05.2019