5. Media Context

When a site has to handle pictures, you can have different type of pictures: news pictures, users pictures etc. But in the end pictures require the same features: resize, cdn and database relationship with entities.

The MediaBundle tries to solve this situation by introducing context: a context has its own set of media providers and its own set of formats. That means you can have a small user picture format and a small news picture format with different sizes and providers.

By setting constraint to false, the uploaded picture can be smaller than the defined size(s).

Also each format allows to use a custom resizer instead of the default one configured in the provider:

# config/packages/sonata_media.yaml

        default:  # the default context is mandatory
                - sonata.media.provider.dailymotion
                - sonata.media.provider.youtube
                - sonata.media.provider.image
                - sonata.media.provider.file

                small: { width: 100, quality: 70 }
                big: { width: 500, quality: 70, resizer: sonata.media.resizer.square }

                - sonata.media.provider.youtube
                - sonata.media.provider.image

                small: { width: 150, quality: 95 }
                big: { width: 500, quality: 90, constraint: false }

5.1. AdminBundle Integration

When you create a new blog post, you might want to link an image to that post.

Doctrine ORM:


In the PostAdmin, you can add a new field image with a link_parameters option. This option will add an extra parameter into the add link. This parameter will be used by the related controller:

public function configureFormFields(FormMapper $form): void
        ->add('image', 'sonata_type_model_list', [], ['link_parameters' =>['context' => 'news']]);

If you look in the MediaAdmin class, the class defined a configurePersistentParameters() method. This method allows you to define persistent parameters across the MediaAdminController. Depending on the action, the parameter can change the Admin behaviors:

protected function configurePersistentParameters(): array
    if (!$this->getRequest()) {
        return [];

    return [
        'provider' => $this->getRequest()->get('provider'),
        'context'  => $this->getRequest()->get('context'),
  • list: filters the list to display only one context

  • create: creates a new media asset with the provided context