Coder Social home page Coder Social logo

mediabundle's Introduction

Installation instruction

Composer

Add those lines to your composer.json

#composer.json
    "require": {
        ...
      "awakit/media-bundle": "^3.4"
    },

    "repositories": [
        ...
        { "type": "composer", "url": "http://packages.awakit:8000/" }
    ],

and update

Kernel

Add thoses bundles to your AppKernel.php

    new Liip\ImagineBundle\LiipImagineBundle(),
    new Symfony\Bundle\AsseticBundle\AsseticBundle(),
    new Knp\DoctrineBehaviors\Bundle\DoctrineBehaviorsBundle(),
    new Awakit\MediaBundle\AwakitMediaBundle(),

Routing

Add thoses route to your routing.yml

#app/config/routing.yml
media:
    resource: "@AwakitMediaBundle/Resources/config/routing.yml"

Config

Create a new class and extends it with Awakit\MediaBundle\Media

namespace YourBundle\Entity;
use Awakit\MediaBundle\Model\Media as BaseMedia;

/**
 * @ORM\Table()
 * @ORM\Entity()
 */
class YourMedia extends BaseMedia
{

}

Then add these lines to your config.yml

doctrine:
    dbal:
        types:
            json: Doctrine\DBAL\Types\JsonArrayType
            
            
awakit_media:
    upload_folder: /media
    entities:
        YourBundle/Entity/YourMedia: ~
        AnotherBundle/Entity/AnotherMedia: ~ #example, AnotherMedia also extends Awakit\MediaBundle\Entity\Media, you can define as much as media class you need 

liip_imagine:
    filter_sets: #example set, define yours
        full: 
            quality: 100
        thumb:
            quality: 75
            filters:
                thumbnail: { size: [120, 90], mode: outbound }

see LiipImagineBundle Configuration for liip filters config

If you want another folder for your uploads, don't forget to modify liip setting as well

awakit_media:
    upload_folder: /AnotherFolder

liip_imagine:
    resolvers:
        default:
            web_path:
                cache_prefix: AnotherFolder/cache

###Providers For the moment only Image (alias 'image') and File (alias 'file') provider are available.

Twig

To insert a media in the twig, use the block with an optionnal filter name, defined in the liip_imagine.filter_sets section. If you don't provider a filter name, 'reference' filter is default. it will return the original media uploaded with any filter or post processing.

{% media mediaObject, '<filter>' %}

You can also pass class/width/height/alt options to the media rendering:

{% media mediaObject, '<filter>' with {class: 'classwanted class2wanted', alt: 'title', width: '200px', height: '50px'} %}

you can also ask for the path directly

{% path media, '<filter>' %}

FormType

An Awakit\MediaBundle\Form\Type\MediaType is available. Only 'data_class' option is mandatory. 'provider' option default value is 'file', change it if you wanna create a media with another provider (ex 'image'). In case you're editing a persisted media object, the option is overwritten by $media->getProviderName() value in any case

$builder->add(<fieldName>,MediaType::class, array('provider'=> 'image', 'data_class' => 'YourAppBundle:YourMedia));

Api

This bundle is compatible with DunglasApiBundle and NelmioApiDocBundle. No config is needed. 2 api groups are already defined for input and output serialization (api_input and api_output). If you want to change the groups or add new one. Modify the @Groups annotation in your extended class

namespace YourBundle\Entity;
use Awakit\MediaBundle\Model\Media as BaseMedia;

/**
 * @ORM\Table()
 * @ORM\Entity()
 */
class YourMedia extends BaseMedia
{
    /**
     * @ORM\Column(type="string", nullable=false)
     * @Groups({"new_group_input","another_group_input","new_group_ouput"})
     */
    protected $name;
}

and the in the config.yml, modify the configuration

awakit_media:
    ...
    entities:
        YourBundle\Entity\YourMedia:
            group_input: ['new_group_input', 'another_group_input']
            group_output: ['new_group_ouput']
            

Custom MediaProvider

To implement your own provider, use the ProviderInterface or extends the BaseProvider (easier) then defined it as a service with the tag media.provider (beware, the alias must be the same as YourProvider->getAlias())

app.media.your_type.provider:
        class: YouApp\YourBundle\YourProvider
        tags:
            - { name: media.provider, alias: file }

Dropzone

The MediaType is compatible with dropzone.js , set true to 'dropzone' option. Install it and add the the js and css provided by dropzone install to your layout. Beware you can't use twice MediaType with dropzone option set to true within the same form (blame dropzone, or me, prehaps i'm dumb)

$builder = $this->createFormBuilder();
$builder->add('media', MediaType::class, array( ... ,'dropzone' => true ) );

You can upload more than one files at each time, change option maxFiles in the MediaType. Don't forget : each file sumbit the whole form.

$builder = $this->createFormBuilder();
$builder->add('media', MediaType::class, array( ... ,'dropzone' => true, maxFiles => 50) );

mediabundle's People

Stargazers

Karim Moussouni avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.