glavweb/uploader-bundle

此包最新版本(v3.5.1)没有可用的许可证信息。

Symfony GlavwebUploaderBundle

v3.5.1 2023-05-23 08:31 UTC

README

使用composer获取此包

从您的Symfony项目根目录的终端运行此命令以添加GlavwebUploaderBundle

php composer.phar require glavweb/uploader-bundle

启用包

要开始使用此包,请在您的应用程序内核类中注册该包

// app/AppKernel.php
public function registerBundles()
{
    $bundles = array(
        // ...
        new Glavweb\UploaderBundle\GlavwebUploaderBundle(),
        // ...
    );
}

配置包

此包设计为开箱即用。为了使此包运行,您必须配置的唯一内容是映射。

# 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
            

为了启用动态路由,将以下内容添加到您的路由配置文件中。

#  app/config/routing.yml

glavweb_uploader:
    resource: "@GlavwebUploaderBundle/Resources/config/routing.yml"
    prefix:   /

基本用法

  1. 为需要支持 "GlavwebUploadable" 的实体添加了注解。在定义实体类之前,添加 "@Glavweb\Uploadable"
use Glavweb\UploaderBundle\Mapping\Annotation as Glavweb;

/**
 * Entity
 * 
 * @Glavweb\Uploadable
 */
class Entity
{
}

并在定义多对多或多对一的属性之前添加另一个注解 "@Glavweb\UploadableField"

/**
 * @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();
}

或者

/**
 * @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;
  1. 对于构建表单,您可以使用 GlavwebUploaderDropzoneBundle

事件

此包有3个事件

  • glavweb_uploader.validation; // 第一个事件,将在文件上传之前执行
  • glavweb_uploader.pre_upload; // 将在文件上传之前执行
  • glavweb_uploader.post_upload. // 将在文件上传之后执行

示例

以示例为例,我们使用上传后事件。

services.yml

post_upload_listener:
    class: AppBundle\Listener\PostUploadListener
    tags:
        - { name: kernel.event_listener, event: glavweb_uploader.post_upload, method: onPostUpload }

监听器类

namespace AppBundle\Listener;

use Glavweb\UploaderBundle\Event\PostUploadEvent;

class PostUploadListener
{
    /**
     * @param PostUploadEvent $event
     */
    public function onPostUpload(PostUploadEvent $event)
    {
        // Some logic
    }
}

其他监听器的工作逻辑类似。

您还可以只为您的上下文定义监听器,例如,如果上下文是 "article"。

article_post_upload_listener:
    class: AppBundle\Listener\ArticlePostUploadListener
    tags:
        - { name: kernel.event_listener, event: glavweb_uploader.post_upload.article, method: onPostUpload }