sidus/file-upload-bundle

允许在Doctrine实体中直接上传文件,基于oneup/uploader-bundle和jQuery-file-upload

v1.2.9 2020-01-30 16:03 UTC

This package is auto-updated.

Last update: 2024-08-29 04:14:29 UTC


README

此包允许您通过Flysystem存储层定义与虚拟文件系统条目链接的Doctrine实体。

这意味着在上传文件时,将自动在数据库中创建一个匹配您资源类型的相应实体。

警告:这些实体旨在与其他Doctrine实体关联,而不是独立管理:如果您想为文件添加标题和描述,请创建不同的实体并创建到资源的关联。

上传部分由Oneup Uploader Bundle处理,并且添加了非常少的魔法。

本文档正在完善中,包目前按此工作,但可能需要比这里解释的更多配置。

安装

您需要自己将jQuery包含到项目中。

$ composer require sidus/file-upload-bundle

更新您的Kernel

<?php

class AppKernel
{
    /**
     * {@inheritdoc}
     */
    public function registerBundles()
    {
        $bundles = [
            // ...
            new Oneup\UploaderBundle\OneupUploaderBundle(),
            new Oneup\FlysystemBundle\OneupFlysystemBundle(),
            new Sidus\FileUploadBundle\SidusFileUploadBundle(),
            // ...
        ];
        // ...
    }
}

注意:顺序非常重要,因为我们覆盖了一些来自Oneup的参数。

在composer.json中添加额外的配置以在公共目录中公开此包的jquery-fileupload供应商。

{
    "scripts": {
        "symfony-scripts": [
            // Append this before the clear-cache script
            "Sidus\\FileUploadBundle\\Composer\\ScriptHandler::symlinkJQueryFileUpload"
        ]
    }
}

使用Flysystem和本地文件系统配置OneUploader的示例。

注意,为了使Sidus/FileUpload工作,OneUploader、Flysystem和Sidus的键必须匹配。

# one uploader
oneup_uploader:
    mappings:
        document:
            frontend: blueimp
            storage:
                type: flysystem
                filesystem: oneup_flysystem.document_filesystem
            max_size: 64000000

oneup_flysystem:
    adapters:
        my_adapter:
            local:
                directory: '%kernel.root_dir%/../var/data/resources'
    filesystems:
        document:
            adapter: my_adapter

注意Oneup Uploader对Flysystem文件系统的引用

document -> oneup_flysystem.document_filesystem

现在定义您的可上传实体,请注意配置键

sidus_file_upload:
    configurations:
        document: # This key will be the entrypoint to any fileupload form widget
            entity: MyNamespace\AssetBundle\Entity\Document
            filesystem: document # Optional, defaults to configuration key
            uploader: document # Optional, defaults to configuration key

将上传路由添加到您的路由中

sidus_file_upload:
    resource: "@SidusFileUploadBundle/Resources/config/routing.yml"

实体最低要求

<?php

namespace MyNamespace\AssetBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Sidus\FileUploadBundle\Entity\Resource;

/**
 * @ORM\Entity(repositoryClass="Sidus\FileUploadBundle\Entity\ResourceRepository")
 */
class Document extends Resource
{
    /**
     * @return string
     */
    public static function getType()
    {
        return 'document'; // Must match your mapping key
    }
}

在布局中加载必要的CSS和JS(有很多方法可以做到这一点)

'bundles/sidusfileupload/css/fileupload.css'

'bundles/sidusfileupload/vendor/jquery-file-upload/js/jquery.fileupload.js'
'bundles/sidusfileupload/vendor/jquery-file-upload/js/jquery.fileupload-jquery-ui.js'
'bundles/sidusfileupload/vendor/jquery-file-upload/js/jquery.iframe-transport.js'
'bundles/sidusfileupload/js/jquery.fileupload.sidus.js'

在文档初始化时加载小部件(这不是最佳做法...)

$(document).find('.fileupload-widget').each(function () {
    $(this).sidusFileUpload();
});

在创建表单时,您可以使用“sidus_resource”类型来声明字段为上传。您只需设置“resource_type”选项,该选项对应于您想要使用的实体。

序列化器

如果您想使用Symfony序列化器支持,还需要要求这个

$ composer require sidus/base-serializer-bundle

您需要在内核中启用这些包

<?php

class AppKernel
{
    /**
     * {@inheritdoc}
     */
    public function registerBundles()
    {
        $bundles = [
            // ...
            new Sidus\BaseBundle\SidusBaseBundle(),
            new Sidus\BaseSerializerBundle\SidusBaseSerializerBundle(),
            // Then the one documented in the install process
            new Oneup\UploaderBundle\OneupUploaderBundle(),
            new Oneup\FlysystemBundle\OneupFlysystemBundle(),
            new Sidus\FileUploadBundle\SidusFileUploadBundle(),
            // ...
        ];
        // ...
    }
}

最后,您需要在配置中启用序列化器支持

sidus_file_upload:
    enable_serializer: true