dev-cutomize_templates
dev-cutomize_templatesSymfony GlavwebUploaderBundle
The Requires
by Andrey Nilov
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