/glide-bundle

Integrate the Glide library in your Symfony app

Primary LanguagePHPMIT LicenseMIT

Glide Symfony Bundle

Integrate the great Glide library in your Symfony app.

Installation

$ composer require erichard/glide-bundle

Then you need to add the bundle to your AppKernel.

$bundles = array(
    ...
    new Erichard\GlideBundle\ErichardGlideBundle(),
    ...
);

Enable the routing in your app/config/routing.yml

_erichard_glide:
    resource: "@ErichardGlideBundle/Resources/config/routing.yml"

Configuration

erichard_glide:
    sign_key: ~
    presets:
        product_showcase: # glide options
            w: 540
            h: 540
    accept_webp:
        enabled: true # Auto convert to WebP if the browser support it (false by default)
    servers:
        image:
            source: oneup_flysystem.image_filesystem # A flystem service
            cache: oneup_flysystem.cache_filesystem # A flystem service
            max_image_size: 4000000 # OPTIONAL - number of pixels
            defaults: # OPTIONAL - glide defaults options
                q: 90
                fm: jpg

I recommend to use the oneup/flysystem-bundle package to manage your flysystems services.

Servers

You can configure as many servers you want. Each server must have its proper source and cache flysystem adapter. For example you can have a aws server with both source and cache in Amazon S3 buckets and a local server serving locally stored images.

Presets

I prefer to use presets in my projects to avoid having image settings scattered across templates. Check the Glide documentation to learn more about presets.

Security

For enhanced security you should sign each HTTP request by setting the sign_key option above.

In addition signing URLs, you can also limit how large images can be generated for each server with the max_image_size setting.

Take a look at the Glide documentation to learn more about security.

Twig Extension

A twig extension is provided to generate images URL in your templates. The extension will handle the request signature if you have enabled the feature.

{{ glideUrl('image', image.path, {'p': 'product_showcase'}) }}

Get glide servers from container

Servers are accessible publicly in the container. You can grab them with their id erichard_glide.<name>_server.

With the exemple from above you can get the server like this.

$server = $this->get('erichard_glide.image_server');