silasjoisten / sonata-multiupload-bundle
一个允许您在Sonata中启用多文件上传的包
4.0.1
2022-05-16 06:26 UTC
Requires
- php: ^8.0
- oskarstark/symfony-http-responder: ^1.0.0
- sonata-project/admin-bundle: ^4.2
- sonata-project/media-bundle: ^4.1
- symfony/twig-bridge: ^4.4 || ^5.3 || ^6.0
- twig/twig: ^2.6 || ^3.3
Requires (Dev)
- dev-master
- 4.0.1
- 4.0.0
- 3.x-dev
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.1
- 3.1.0
- 3.0.0
- 2.3.0
- 2.2.3
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.0
- 2.0.1
- 2.0.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/github_actions/actions/cache-3.2.6
- dev-dependabot/npm_and_yarn/json5-1.0.2
- dev-dependabot/github_actions/actions/checkout-3.3.0
- dev-dependabot/npm_and_yarn/express-4.18.2
- dev-dependabot/npm_and_yarn/qs-6.5.3
- dev-dependabot/github_actions/stefanzweifel/git-auto-commit-action-4.16.0
- dev-dependabot/npm_and_yarn/decode-uri-component-0.2.2
- dev-dependabot/github_actions/ramsey/composer-install-2.2.0
- dev-dependabot/npm_and_yarn/node-sass-7.0.3
- dev-dependabot/npm_and_yarn/symfony/webpack-encore-3.1.0
- dev-dependabot/github_actions/shivammathur/setup-php-2.18.1
This package is auto-updated.
Last update: 2024-09-22 04:15:46 UTC
README
版本
示例
检查示例项目
安装
步骤 1:下载包
composer require silasjoisten/sonata-multiupload-bundle
步骤 2:启用包
然后,通过将包添加到项目中的app/AppKernel.php
文件中注册的包列表中来启用包
<?php class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new SilasJoisten\Sonata\MultiUploadBundle\SonataMultiUploadBundle(), ); // ... } // ... }
如果您正在使用config/bundles.php
中的flex注册包
<?php return [ //... SilasJoisten\Sonata\MultiUploadBundle\SonataMultiUploadBundle::class => ['all' => true] ];
步骤 3:配置
您必须打开此包的配置文件,并配置您想启用多上传的提供者。
# config/packages/sonata_multi_upload.yaml sonata_multi_upload: # ... providers: - sonata.media.provider.image - sonata.media.provider.video
向SonataAdmin配置添加JavaScript和CSS
# config/packages/sonata_admin.yaml sonata_admin: assets: extra_stylesheets: - bundles/sonatamultiupload/dist/sonata-multiupload.css extra_javascripts: - bundles/sonatamultiupload/dist/sonata-multiupload.js
可选
# config/packages/sonata_multi_upload.yaml sonata_multi_upload: max_upload_filesize: 3000000 # 3MB the default value is 0 -> allow every size
有一个名为redirect_to
的选项,允许上传完成后重定向到您配置的页面。
# config/packages/sonata_multi_upload.yaml sonata_multi_upload: redirect_to: 'admin_sonata_media_media_list'
提示: MultiUploadBundle会自动将上传的Media
对象的id传递给重定向路由,例如:/foo/bar?idx=%5B70%2C71%2C72%5D
,因此您可以从中提取它们并创建一个媒体库。
示例:上传多个图片并自动创建Gallery
创建控制器
该控制器接收您的请求,并在本例中创建一个包含GalleryItems
的Gallery
,然后重定向到GalleryAdmin
的编辑视图。
<?php namespace App\Controller; use App\Entity\SonataMediaGallery; use App\Entity\SonataMediaGalleryItem; use Sonata\MediaBundle\Admin\GalleryAdmin; use Sonata\MediaBundle\Entity\MediaManager; use Sonata\MediaBundle\Entity\GalleryManager; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; final class CreateGalleryAction { public function __construct( private MediaManager $mediaManager, private GalleryManager $galleryManager, private GalleryAdmin $galleryAdmin ) { } public function __invoke(Request $request): RedirectResponse { $idx = $request->query->get('idx'); $idx = json_decode($idx); /** @var SonataMediaGallery $gallery */ $gallery = $this->galleryManager->create(); $gallery->setName('Auto Created Gallery'); $gallery->setEnabled(false); $gallery->setContext('default'); foreach ($idx as $id) { $media = $this->mediaManager->find($id); $galleryHasMedia = new SonataMediaGalleryItem(); $galleryHasMedia->setGallery($gallery); $galleryHasMedia->setMedia($media); $gallery->addGalleryItem($galleryHasMedia); } $this->galleryManager->save($gallery); return new RedirectResponse($this->galleryAdmin->generateObjectUrl('edit', $gallery)); } }
注册路由
如果您已经覆盖了默认的MediaAdmin
,您可以通过以下方式在管理类中添加路由:
protected function configureRoutes(RouteCollectionInterface $collection): void { $collection->add('create_gallery', 'multi-upload/create-gallery', [ '_controller' => CreateGalleryAction::class, ]); }
否则,您可以创建一个如下的AdminExtension
:
<?php declare(strict_types=1); namespace App\Admin\Extension; use App\Controller\CreateGalleryAction; use Sonata\AdminBundle\Admin\AbstractAdminExtension; use Sonata\AdminBundle\Admin\AdminInterface; use Sonata\AdminBundle\Route\RouteCollectionInterface; final class MediaAddRouteExtension extends AbstractAdminExtension { public function configureRoutes(AdminInterface $admin, RouteCollectionInterface $collection): void { $collection->add('create_gallery', 'multi-upload/create-gallery', [ '_controller' => CreateGalleryAction::class, ]); } }
并在您的config/services.yaml
中注册此扩展
services: # ... App\Admin\Extension\MediaAddRouteExtension: tags: - { name: sonata.admin.extension, target: sonata.media.admin.media }
现在在config/packages/sonata_multi_upload.yaml
中配置redirect_to
sonata_multi_upload: redirect_to: 'admin_app_sonatamediamedia_create_gallery'
您可能需要为MediaManager
和GalleryManager
创建别名,如下所示
# config/services.yaml services: Sonata\MediaBundle\Entity\MediaManager: alias: sonata.media.manager.media Sonata\MediaBundle\Entity\GalleryManager: alias: sonata.media.manager.gallery Sonata\MediaBundle\Admin\GalleryAdmin: alias: sonata.media.admin.gallery
就这样。
请注意,上传器对于YouTubeProvider,VimeoProvider等提供者将不会工作!
4. 视觉效果
使用的库