/** * Export entities according to a type (json, csv, xls...) * * @param Admin $admin * @param $exportType * @return Response * @throws MappingException */ protected function exportEntities(Admin $admin, $exportType) { // check allowed export types $this->forward404Unless(in_array($exportType, ['json', 'html', 'xls', 'csv', 'xml'])); /** @var DataExporter $exporter */ $exporter = $this->get('ee.dataexporter'); /** @var ClassMetadata $metadata */ $metadata = $this->getEntityManager()->getClassMetadata($admin->getRepository()->getClassName()); $exportColumns = []; $fields = $metadata->getFieldNames(); $hooks = []; foreach ($fields as $fieldName) { $exporter->addHook(function ($fieldValue) { // if field is an array if (is_array($fieldValue)) { $value = $this->recursiveImplode(', ', $fieldValue); } else { if ($fieldValue instanceof DateTime) { // format date in string $value = $fieldValue->format('c'); } else { $value = $fieldValue; } } return $value; }, "{$fieldName}"); // add field column to export $exportColumns[$fieldName] = $fieldName; } $exporter->setOptions($exportType, ['fileName' => $admin->getName() . '-export-' . date('Y-m-d')])->setColumns($exportColumns)->setData($admin->getEntities()); foreach ($hooks as $hookName => $hook) { $exporter->addHook($hook, $hookName); } return $exporter->render(); }