/**
  * 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();
 }