[Symfony] Use references in YAML in EasyAdmin bundle config for virtual entities

Published on 2018-10-23 • Modified on 2018-10-23

One of the many interesting feature of the EasyAdminBundle is that you can define filters for your entities. It allows to have several entries for the same entity but for different types for example. I wanted to share all the configuration of the main entity (in this case Token with all other virtual entities. (in this case TokenType2) without to have to copy/paste all the configuration. I never used YAML references before and this is a perfect use case for them. So here is the code it is self explainatory. The TokenType2 virtual entity will use the three configurations YAML references declared in the main Token entity section.


easy_admin:
    # ...
    entities:
        Token: # ---------------------------------------------------------------
            class: AppBundle\Entity\Token
            list:
                actions: &token.list.actions # <------- 1st reference declaration
                    - { name: 'tokenShowPublic', icon: 'binoculars', label: 'View' }
                    # ... long list of actions
                fields: &token.list.fields # <------- 2nd reference declaration
                    - { property: 'id' }
                    # ... long list of fields
            form:
                fields: &token.form.fields # <------- 3rd reference declaration
                    - { type: 'group', label: 'IDs', icon: 'gear' }
                    - { property: 'id', type: 'integer', type_options: { disabled: true }, css_class: 'col-sm-2'}
                    # ... long list of fields

        TokenType2:
            class: AppBundle\Entity\Token
            dql_filter: 'entity.tokenType=2'
            list:
                actions: *token.list.actions # <------- use 1st reference
                fields: *token.list.fields # <------- use 2nd reference
            form:
                fields: *token.form.fields # <------- use 3rd reference

            # That's it, no more duplicated configuration!

 More on Stackoverflow