-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMyAbstractCrudController.php
65 lines (54 loc) · 2.26 KB
/
MyAbstractCrudController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
namespace App\Controller\Admin;
use App\Service\CsvService;
use EasyCorp\Bundle\EasyAdminBundle\Collection\FieldCollection;
use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\Option\EA;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use EasyCorp\Bundle\EasyAdminBundle\Factory\FilterFactory;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
abstract class MyAbstractCrudController extends AbstractCrudController
{
public function export(Request $request, CsvService $csvService)
{
$context = $request->attributes->get(EA::CONTEXT_REQUEST_ATTRIBUTE);
if (method_exists($context->getEntity()->getFqcn(), 'getExportData')) {
$fields = FieldCollection::new($this->configureFields(Crud::PAGE_INDEX));
$filters = $this->get(FilterFactory::class)->create(
$context->getCrud()->getFiltersConfig(),
$fields,
$context->getEntity()
);
$entities = $this->createIndexQueryBuilder($context->getSearch(), $context->getEntity(), $fields, $filters)
->getQuery()
->toIterable();
$data = [];
foreach ($entities as $entity) {
$data[] = $entity->getExportData();
}
return $csvService
->export(
$data,
'export_'.strtolower($context->getEntity()->getName()).'_'.date_create()->format('d-m-y').'.csv'
);
}
return new Response(null, 204);
}
public function configureActions(Actions $actions): Actions
{
$class = static::getEntityFqcn();
if (method_exists($class, 'getExportData')) {
$export = Action::new('export', 'actions.export')
->setIcon('fa fa-download')
->linkToCrudAction('export')
->setCssClass('btn')
->createAsGlobalAction()
;
return parent::configureActions($actions)->add(Crud::PAGE_INDEX, $export);
}
return parent::configureActions($actions);
}
}