PHPackages                             jorisdugue/easyadmin-extra-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. jorisdugue/easyadmin-extra-bundle

ActiveSymfony-bundle[PDF &amp; Document Generation](/categories/documents)

jorisdugue/easyadmin-extra-bundle
=================================

Advanced data tools for EasyAdmin 5, including exports, security helpers, and future bulk operations.

1.0.3(2mo ago)575MITPHPPHP &gt;=8.2CI passing

Since Mar 31Pushed 1mo ago2 watchersCompare

[ Source](https://github.com/jorisdugue/easyadmin-extra-bundle)[ Packagist](https://packagist.org/packages/jorisdugue/easyadmin-extra-bundle)[ RSS](/packages/jorisdugue-easyadmin-extra-bundle/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (3)Dependencies (17)Versions (7)Used By (0)

EasyAdmin Extra Bundle
======================

[](#easyadmin-extra-bundle)

[![CI](https://github.com/jorisdugue/easyadmin-extra-bundle/actions/workflows/ci.yml/badge.svg)](https://github.com/jorisdugue/easyadmin-extra-bundle/actions/workflows/ci.yml/badge.svg)[![PHP](https://camo.githubusercontent.com/187240af044d09d5b14a1d9d9ebdf3f7a993e4c7bc09bdb46b4ba661a891bf5b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322532422d626c7565)](https://camo.githubusercontent.com/187240af044d09d5b14a1d9d9ebdf3f7a993e4c7bc09bdb46b4ba661a891bf5b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322532422d626c7565)[![Symfony](https://camo.githubusercontent.com/3359924034d6073b81465cc82418c8688cc935e0e6f1e650ac8e2a5cd4d16b78/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53796d666f6e792d372e34253230253246253230382d626c61636b)](https://camo.githubusercontent.com/3359924034d6073b81465cc82418c8688cc935e0e6f1e650ac8e2a5cd4d16b78/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f53796d666f6e792d372e34253230253246253230382d626c61636b)[![EasyAdmin](https://camo.githubusercontent.com/6d0a4836875a1a0283f9a26fae9c0fe857fc9ee96c1354f15118e4c186c4cb66/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4561737941646d696e2d352d6f72616e6765)](https://camo.githubusercontent.com/6d0a4836875a1a0283f9a26fae9c0fe857fc9ee96c1354f15118e4c186c4cb66/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4561737941646d696e2d352d6f72616e6765)[![License](https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e)](https://camo.githubusercontent.com/f8df3091bbe1149f398a5369b2c39e896766f9f6efba3477c63e9b4aa940ef14/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e)[![Packagist Version](https://camo.githubusercontent.com/50bb25bdab9e181aeca6c5e8e9eb5cf851ebea45f7590f7240221d783965429e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6a6f72697364756775652f6561737961646d696e2d65787472612d62756e646c65)](https://camo.githubusercontent.com/50bb25bdab9e181aeca6c5e8e9eb5cf851ebea45f7590f7240221d783965429e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6a6f72697364756775652f6561737961646d696e2d65787472612d62756e646c65)

Export and CSV import workflows for EasyAdmin 5 applications on Symfony 7.4/8 and PHP 8.2+.

EasyAdmin Extra Bundle adds opt-in data exchange actions to EasyAdmin CRUD controllers. It is designed for back offices that need stable file contracts, previewable CSV imports, selected-row exports, and explicit field definitions that are independent from the fields displayed in the EasyAdmin UI.

Why Use This?
-------------

[](#why-use-this)

EasyAdmin fields are UI fields. They describe forms, list pages, formatting, and admin interaction.

Import and export files often need a different contract: hidden columns, fixed labels, stable ordering, normalized values, masked data, or explicit CSV column positions. This bundle keeps those concerns separate: you define configured import/export fields for the file contract, while EasyAdmin fields remain focused on the admin interface.

Use it when you need to:

- export CSV, XLSX, JSON, or XML from EasyAdmin CRUD index pages
- preview exports before download
- export selected rows through EasyAdmin batch actions
- preview CSV imports before persistence
- confirm CSV imports through a revalidated temporary file flow
- map imports by headers, field order, or explicit CSV column position
- transform import/export values without changing the EasyAdmin UI

Features
--------

[](#features)

- `#[AdminExport]` and `#[AdminImport]` attributes
- dedicated import/export field providers
- CSV/XLSX/JSON/XML export
- CSV import preview and confirmation
- batch export
- export sets
- export field masking, role visibility, and format visibility
- English and French translations

Installation
------------

[](#installation)

```
composer require jorisdugue/easyadmin-extra-bundle
```

Symfony Flex should auto-register the bundle. If it does not, register the bundle in your Symfony application as usual.

Requirements
------------

[](#requirements)

- PHP `>=8.2`
- Symfony Framework Bundle `^7.4 || ^8.0`
- EasyAdmin Bundle `^5.0`
- Confirmed CSV imports require a Doctrine ORM entity manager for the imported entity.

Route Loader
------------

[](#route-loader)

Add the route loader:

```
# config/routes/easyadmin_extra.yaml
easyadmin_extra:
  resource: .
  type: jorisdugue_easyadmin_extra.routes
```

> Without this route loader, generated import and export routes are not available.

Minimal Export Example
----------------------

[](#minimal-export-example)

```
use App\Entity\Product;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use JorisDugue\EasyAdminExtraBundle\Attribute\AdminExport;
use JorisDugue\EasyAdminExtraBundle\Contract\ExportFieldsProviderInterface;
use JorisDugue\EasyAdminExtraBundle\Field\MoneyExportField;
use JorisDugue\EasyAdminExtraBundle\Field\TextExportField;

#[AdminExport(formats: ['csv', 'xlsx'], previewEnabled: true)]
final class ProductCrudController extends AbstractCrudController implements ExportFieldsProviderInterface
{
    public static function getEntityFqcn(): string
    {
        return Product::class;
    }

    public static function getExportFields(?string $exportSet = null): array
    {
        return [
            TextExportField::new('sku', 'SKU'),
            TextExportField::new('name', 'Name'),
            MoneyExportField::new('price', 'Price')->storedAsCents(),
        ];
    }
}
```

Minimal Import Example
----------------------

[](#minimal-import-example)

```
use App\Entity\Product;
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController;
use JorisDugue\EasyAdminExtraBundle\Attribute\AdminImport;
use JorisDugue\EasyAdminExtraBundle\Contract\ImportFieldsProviderInterface;
use JorisDugue\EasyAdminExtraBundle\Field\ChoiceImportField;
use JorisDugue\EasyAdminExtraBundle\Field\DateImportField;
use JorisDugue\EasyAdminExtraBundle\Field\TextImportField;

#[AdminImport]
final class ProductCrudController extends AbstractCrudController implements ImportFieldsProviderInterface
{
    public static function getEntityFqcn(): string
    {
        return Product::class;
    }

    public static function getImportFields(?string $importSet = null): array
    {
        return [
            TextImportField::new('sku', 'SKU')->required(),
            TextImportField::new('name', 'Name')->required(),
            ChoiceImportField::new('status', 'Status')
                ->setChoices(['draft' => 'Draft', 'published' => 'Published'])
                ->required(),
            DateImportField::new('createdAt', 'Created at')->setFormat('Y-m-d'),
        ];
    }
}
```

Documentation
-------------

[](#documentation)

- [Getting started](docs/getting-started.md)
- [Export](docs/export.md)
- [Import](docs/import.md)
- [Security](docs/security.md)
- [Configuration](docs/configuration.md)
- [Architecture](docs/architecture.md)
- [Examples](docs/examples/product-import.md)

The documentation site uses Zensical and is configured by [zensical.toml](zensical.toml):

```
zensical serve
zensical build
```

License
-------

[](#license)

MIT

###  Health Score

44

—

FairBetter than 91% of packages

Maintenance88

Actively maintained with recent releases

Popularity17

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 84.4% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~7 days

Total

4

Last Release

67d ago

PHP version history (2 changes)1.0.0PHP &gt;=8.4

v1.0.1PHP &gt;=8.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/fe05c9786cbd5204d9f656ddf19095b03662a978d524427c088a36b5d26e1bc2?d=identicon)[zariuke](/maintainers/zariuke)

---

Top Contributors

[![jorisdugue](https://avatars.githubusercontent.com/u/18118107?v=4)](https://github.com/jorisdugue "jorisdugue (54 commits)")[![gitkrakon](https://avatars.githubusercontent.com/u/286656469?v=4)](https://github.com/gitkrakon "gitkrakon (10 commits)")

---

Tags

jsonsymfonybundlesecurityexportxlsxcsvadminbackofficeeasyadmingdprbulkeasyadmin-bundle

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/jorisdugue-easyadmin-extra-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/jorisdugue-easyadmin-extra-bundle/health.svg)](https://phpackages.com/packages/jorisdugue-easyadmin-extra-bundle)
```

###  Alternatives

[easycorp/easyadmin-bundle

Admin generator for Symfony applications

4.3k17.5M378](/packages/easycorp-easyadmin-bundle)[sulu/sulu

Core framework that implements the functionality of the Sulu content management system

1.3k1.4M196](/packages/sulu-sulu)[2lenet/crudit-bundle

The easy like Crud'it Bundle.

1615.6k12](/packages/2lenet-crudit-bundle)[open-dxp/opendxp

Content &amp; Product Management Framework (CMS/PIM)

9317.2k55](/packages/open-dxp-opendxp)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

585.4M521](/packages/shopware-core)[chameleon-system/chameleon-base

The Chameleon System core.

1027.9k4](/packages/chameleon-system-chameleon-base)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
