EasyAdmin Extension provides some useful extensions to EasyAdmin admin generator for Symfony.
❗ This bundle requires at least PHP 7.0 and Symfony 3.0 components or stack.
$ composer require alterphp/easyadmin-extension-bundleThis command requires you to have Composer installed globally, as explained in the Composer documentation.
<?php
// app/AppKernel.php
// ...
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new AlterPHP\EasyAdminExtensionBundle\EasyAdminExtensionBundle(),
);
}
// ...
}Instead of loading routes from EasyAdminBundle AdminController, load them from EasyAdminExtensionBundle AdminController.
Symfony 4 directory structure :
# config/routes/easy_admin.yaml
easy_admin:
resource: '@EasyAdminExtensionBundle/Controller/AdminController.php'
prefix: /admin
type: annotation
# ...Former Symfony 2/3 directory structure :
# app/config/routing.yml
easy_admin:
resource: "@EasyAdminExtensionBundle/Controller/AdminController.php"
prefix: /admin
type: annotation
# ...If you have defined your own admin controllers, make them extend EasyAdminExtensionBundle admin controller.
- EasyAdmin allows filtering list with
dql_filterconfiguration entry. But this is not dynamic and must be configured as an apart list ineasy_adminconfiguration.*
This extension allows to dynamically filter lists by adding filters parameter in the URL parameters. Having a list of books at URL <url-to-admin>?action=list&entity=Book with a releaseYear fiekd, you can filter on books releasd in 2016 by requesting <url-to-admin>?action=list&entity=Book&filters[entity.releaseDate]=2016. It only matches exact values, but you can chain them. To request books released in 2015 and 2016, you must request <url-to-admin>?action=list&entity=Book&filters[entity.releaseDate][]=2015&filters[entity.releaseDate][]=2016.
This filters parameter is transmitted to the referer used for post update/delete/create redirection AND for search !
You have custom form types that you want to use in the EasyAdmin configuration. You can already register them with FQCN ... but it's quite boring and makes the admin massively enlarged. This feature allows you to define your own form types with short names, by configuration.
Let's see how to register them with those 2 examples (enum and statusable) :
easy_admin_extension:
custom_form_types:
enum: Admin\Form\Type\EnumType
statusable: Admin\Form\Type\StatusableType
Embed your EasyAdmin lists in edit views. This is really useful for *ToMany relations.
Use pre-configured type embedded_list in the form definition :
easy_admin:
entities:
Event:
class: Tm\EventBundle\Entity\Event
Promoter:
class: AppBundle\Entity\Promoter
form:
fields:
# ...
- { type: group, label: Events, css_class: 'col-sm-12', icon: calendar }
- { property: events, label: '', type: embedded_list, type_options: { entity: Event, filters: { 'entity.promoter': 'form:parent.data.id' } } }
But in many cases, the EmbeddedListHelper guesses type_options for you, and you just have to write :
easy_admin:
entities:
Event:
class: Tm\EventBundle\Entity\Event
Promoter:
class: AppBundle\Entity\Promoter
form:
fields:
# ...
- { type: group, label: Events, css_class: 'col-sm-12', icon: calendar }
- { property: events, label: '', type: embedded_list }
Let's see the result !
You can define a minimum role to access the EasyAdmin controller (any action handled by the controller) :
easy_admin_extension:
minimum_role: ROLE_ADMINThis is just a global restriction, that should live with a security firewall as described in Symfony documentation.
You can also define role permissions per entity action :
easy_admin:
entities:
Product:
class: App\Entity\Product
list:
role: ROLE_ADMIN_PRODUCT_LIST
search:
role: ROLE_ADMIN_PRODUCT_SEARCH
edit:
role: ROLE_ADMIN_PRODUCT_EDIT
show:
role: ROLE_ADMIN_PRODUCT_SHOW
delete:
role: ROLE_ADMIN_PRODUCT_DELETEAbove configuration define a required role per action for Product entity. This is too verbose, isn't it ? Let's sum up as following :
easy_admin:
entities:
Product:
class: App\Entity\Product
role_prefix: ROLE_ADMIN_PRODUCTEntity role_prefix defines all actions required roles by appending the action name to the prefix.
Run following command :
$ ./vendor/phpunit/phpunit/phpunitOR using Docker and Docker Compose :
$ docker-compose run --rm phpunitLocally with Docker :
docker-compose run --rm php /app/vendor/bin/php-cs-fixer fix --config=/app/.php_cs /app/src
Locally with Docker :
docker-compose run --rm php /app/vendor/bin/phpstan analyse -c /app/phpstan.neon --level=6 /app/src
This software is published under the MIT License

