Documentation » Media

17. Troubleshooting »

« 11. Extra

16. API

SonataMediaBundle embeds a Controller to provide an API through FOSRestBundle, with its documentation provided by NelmioApiDocBundle.

16.1. Setup

If you wish to use it, you must first follow the installation instructions of both bundles:

Here’s the configuration we used, you may adapt it to your needs:

    param_fetcher_listener: true
    body_listener:          true
    format_listener:        true
        view_response_listener: force
        enabled: true
        validate: true

    router:  { annotations: true }
    request: { converters: true }
            - { path: '^/', priorities: ['json'], fallback_format: json, prefer_extension: false }

    exception_controller: 'FOS\RestBundle\Controller\ExceptionController::showAction'

In order to activate the API’s, you’ll also need to add this to your routing:

    resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
    prefix:   /api/doc

    type:         rest
    prefix:       /api
    resource:     "@SonataMediaBundle/Resources/config/routing/api.xml"

16.2. Serialization

We’re using JMSSerializationBundle’s serializations groups to customize the inputs & outputs.

The taxonomy is as follows: * sonata_api_read is the group used to display entities * sonata_api_write is the group used for input entities (when used instead of forms)

If you wish to customize the outputted data, feel free to setup your own serialization options by configuring JMSSerializer with those groups.

16.3. Sending a media file

Some providers (file or image for instance) require that you send a file upon the medium creation. To do so through the API, you will need to send the data as a multipart/form-data query.

This would look like this for the cURL call:

curl '' -H 'Authorization: Basic YWRtaW46YWRtaW4=' -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryFhX9k2FPT3sQos00' -H 'Accept: */*' --compressed

And like this for the request body:

Content-Disposition: form-data; name="name"

medium name
Content-Disposition: form-data; name="description"

medium description
Content-Disposition: form-data; name="enabled"

Content-Disposition: form-data; name="copyright"

copyright informations
Content-Disposition: form-data; name="authorName"

medium author name
Content-Disposition: form-data; name="cdnIsFlushable"

Content-Disposition: form-data; name="binaryContent"; filename="my-awesome-image.jpg"
Content-Type: image/jpeg


You may of course still use JSON body for creating a video media (you only have to set the binaryContent argument to the video URL).

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