dev-cutomize_templates
dev-cutomize_templatesSymfony GlavwebUploaderBundle
The Requires
by Andrey Nilov
Wallogit.com
2017 © Pedro Peláez
Symfony GlavwebUploaderBundle
Add GlavwebUploaderBundle by running this command from the terminal at the root of your Symfony project:, (*1)
php composer.phar require glavweb/uploader-bundle
To start using the bundle, register the bundle in your application's kernel class:, (*2)
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Glavweb\UploaderBundle\GlavwebUploaderBundle(),
// ...
);
}
This bundle was designed to just work out of the box. The only thing you have to configure in order to get this bundle up and running is a mapping., (*3)
# app/config/config.yml
glavweb_uploader:
mappings:
entity_images:
providers :
- glavweb_uploader.provider.image
use_orphanage: true
upload_directory: %kernel.root_dir%/../web/uploads/entity_images
upload_directory_url: uploads/entity_images
max_size: 4194304 # 4Mb
allowed_mimetypes: [image/jpeg, image/gif, image/png]
orphanage:
lifetime: 86400
directory: %kernel.cache_dir%/uploader/orphanage
To enable the dynamic routes, add the following to your routing configuration file., (*4)
# app/config/routing.yml
glavweb_uploader:
resource: "@GlavwebUploaderBundle/Resources/config/routing.yml"
prefix: /
use Glavweb\UploaderBundle\Mapping\Annotation as Glavweb;
/**
* Entity
*
* @Glavweb\Uploadable
*/
class Entity
{
}
And another annotation "@Glavweb\UploadableField" before defining the properties of a many-to-many:, (*5)
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Glavweb\UploaderBundle\Entity\Media", inversedBy="entities", orphanRemoval=true)
* @ORM\OrderBy({"position" = "ASC"})
* @Glavweb\UploadableField(mapping="entity_images")
*/
private $images;
/**
* Constructor
*/
public function __construct()
{
...
$this->images = new \Doctrine\Common\Collections\ArrayCollection();
}
Or many-to-one:, (*6)
/** * @var Media * * @ORM\OneToOne(targetEntity="Glavweb\UploaderBundle\Entity\Media", orphanRemoval=true) * @ORM\JoinColumn(name="image_id", referencedColumnName="id", nullable=true, onDelete="SET NULL") */ private $image;
Bundle has 3 events:, (*7)
As example we use post upload event., (*8)
services.yml:, (*9)
post_upload_listener:
class: AppBundle\Listener\PostUploadListener
tags:
- { name: kernel.event_listener, event: glavweb_uploader.post_upload, method: onPostUpload }
Listener class:, (*10)
namespace AppBundle\Listener;
use Glavweb\UploaderBundle\Event\PostUploadEvent;
class PostUploadListener
{
/**
* @param PostUploadEvent $event
*/
public function onPostUpload(PostUploadEvent $event)
{
// Some logic
}
}
Other listeners work on a similar logics., (*11)
Also you can define listeners only for your context, as example if context is "article":, (*12)
article_post_upload_listener:
class: AppBundle\Listener\ArticlePostUploadListener
tags:
- { name: kernel.event_listener, event: glavweb_uploader.post_upload.article, method: onPostUpload }
Symfony GlavwebUploaderBundle