meloflavio / multiple-file-upload-bundle
用于向 Sonata Admin 添加 AngularJS 文件上传字段的包
v1.3.1
2019-01-10 12:30 UTC
Requires
- php: >=5.6
- doctrine/dbal: <2.5||~2.5
- doctrine/doctrine-bundle: ~1.2
- doctrine/orm: ~2.2,>=2.2.3
- sonata-project/admin-bundle: ~3.0
- sonata-project/doctrine-orm-admin-bundle: ~3.0
- sonata-project/media-bundle: ~3.0
- symfony/framework-bundle: ~2.8||~3.0||~3.1
README
此代码是从已归档的 e3n-internetagentur/MultipleFileUploadBundle 分支出来的,未发布最新更改
多文件上传
AppKernel
$bundles = [
...
new Liplex\MultipleFileUploadBundle\LiplexMultipleFileUploadBundle(),
];
配置
每个想要使用多文件上传的字段都必须进行配置。
liplex_multiple_file_upload:
directory: "%liplex_multiple_file_upload_path%" // Default is set to folder web
media_class: 'Application\Sonata\MediaBundle\Entity\Media'
mapping:
product:
class: 'Company\Bundle\AppBundle\Entity\Product'
fields:
image:
field: image
context: product.image
provider: sonata.media.provider.image
files:
field: files
context: product.files
provider: sonata.media.provider.file
...
字段使用
// Multiple images
->add('images', 'multiple_file_upload', [
'label' => 'label.images',
'allow_images' => true,
])
// Multiple files
->add('files', 'multiple_file_upload', [
'label' => 'label.files',
'allow_files' => true,
])
// Set maximal file size to 20 MB
->add('files', 'multiple_file_upload', [
'label' => 'label.files',
'max_file_size' => 20,
'allow_files' => true,
])
// Single upload
->add('image', 'multiple_file_upload', [
'label' => 'label.image',
'single_upload' => true,
'allow_images' => true,
])
// Define extensions
->add('file', 'multiple_file_upload', [
'label' => 'label.file',
'single_upload' => true,
'allow_files' => true,
'allowed_extensions' => [
'pdf',
'md'
]
])
先决条件
此包正常运行需要一些先决条件。
额外配置
您需要在 sonata_doctrine_orm_admin
配置中设置这些模板。
sonata_doctrine_orm_admin:
templates:
form:
- 'LiplexMultipleFileUploadBundle:Admin/Form:form_fields.html.twig'
types:
show:
multiple_image_view: 'LiplexMultipleFileUploadBundle:Admin/CRUD:show_multiple_image_view.html.twig'
multiple_file_view: 'LiplexMultipleFileUploadBundle:Admin/CRUD:show_multiple_file_view.html.twig'
路由
liplex_multiple_file_upload:
resource: "@LiplexMultipleFileUploadBundle/Resources/config/routing.yml"
prefix: /
标准布局
为 standard_layout.html.twig
文件添加以下覆盖。
{% block stylesheets %}
{{ parent() }}
<link rel="stylesheet" href="{{ asset('bundles/liplexmultiplefileupload/css/style.css') }}" type="text/css" media="all" />
{% endblock %}
{% block javascripts %}
{{ parent() }}
<script src="{{ asset('bundles/liplexmultiplefileupload/js/vendor/angular.min.js') }}" type="text/javascript"></script>
<script src="{{ asset('bundles/liplexmultiplefileupload/js/vendor/angular-file-upload.min.js') }}" type="text/javascript"></script>
<script src="{{ asset('bundles/liplexmultiplefileupload/js/vendor/ui-bootstrap.min.js') }}" type="text/javascript"></script>
<script src="{{ asset('bundles/liplexmultiplefileupload/js/multiple-file-upload/app.js') }}" type="text/javascript"></script>
<script src="{{ asset('bundles/liplexmultiplefileupload/js/multiple-file-upload/controllers.js') }}" type="text/javascript"></script>
{% endblock %}
{% block body_attributes %}ng-app="{% block angularApp %}app{% endblock %}"{% endblock %}
媒体
由于您必须使用 sonata media bundle 生成自己的媒体实体,因此没有通用的媒体实体可以用于生成媒体实体。因此,您必须在配置中设置自定义类。
仓库
仓库必须扩展 MultipleFileUploadRepository
仓库...
use Liplex\MultipleFileUploadBundle\Repository\MultipleFileUploadRepository;
class YourRepository extends MultipleFileUploadRepository
... 或者必须实现自己的 store
方法。
/**
* Store one entity.
*
* @param mixed $entity
*/
public function store($entity)
{
$this->getEntityManager()->persist($entity);
$this->getEntityManager()->flush($entity);
}