I am currently working in a sales tracking project - where I am constantly getting into situation where I have to duplicate code about listing, showing or editing models.

I have 3 models, Lead, Customer, and Sales Activity. with 1:1 relations between Lead and Customer and 1:M relation between Lead and Sales Activity.

What I want is that when I SHOW a Lead, I should be able to reuse the show function of customer admin class, and I don't have to redo it in the show function of the Lead admin class.

Similarly, I want to be able add the LIST and CREATE function of the Sales Activity class into the Lead SHOW function without having to recode that which is already present. I could use render(controller()) in a custom template - but that includes the base template as well of the target controller, and it just messes the whole layout

I appreciate any input on the matter. thanks for your time.

1

There are 1 answers

0
Mawcel On

Basic answer would be Admin class inheritance.

Another one would be to make a trait with your configureShowFields and use this trait in all of your admin classes.

If you are open to trying out a new bundle you can check : https://github.com/blast-project/CoreBundle

This bundle allows configuration of you admins in Yaml

And one of the features would suit your use case it would look like:

all:
    Sonata\AdminBundle\Show\ShowMapper:
        add:
            name:
               type: text
            address: 
               type: textarea
            ...

It will let you configure your mappers for all your admins