Documentation » Media

6. Usage »

« 4. Creating a Media Provider: A Vimeo Provider

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

                small: { width: 100 , quality: 70}
                big:   { width: 500 , quality: 70, resizer:}


                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:


Doctrine PHPCR:


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)
        ->add('image', 'sonata_type_model_list', [], ['link_parameters' =>['context' => 'news']]);

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

public function getPersistentParameters()
    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

Found a typo? Something is wrong in this documentation? Just fork and edit it!