sidus / file-upload-bundle
允许在Doctrine实体中直接上传文件,基于oneup/uploader-bundle和jQuery-file-upload
Requires
- blueimp/jquery-file-upload: ~9.18
- doctrine/doctrine-bundle: >=1.2
- emgag/flysystem-hash: ~1.0
- mopa/composer-bridge: ~1.3
- oneup/flysystem-bundle: ~1.13
- oneup/uploader-bundle: ~1.7
Suggests
- sidus/base-serializer-bundle: This is mandatory if you enable serializer support
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