daric / sonata-multiupload-bundle
一个允许你在 Sonata 中启用多文件上传的包
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.1
- 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-allow-sonata4-php8
- dev-dependabot/github_actions/stefanzweifel/git-auto-commit-action-4.15.4
- 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/actions/cache-3.0.11
- dev-dependabot/github_actions/actions/checkout-3.1.0
- dev-dependabot/github_actions/shivammathur/setup-php-2.18.1
This package is not auto-updated.
Last update: 2024-10-01 20:22:39 UTC
README
版本
示例
查看示例项目 Sample Project
安装
步骤 1: 下载包
composer require silasjoisten/sonata-multiupload-bundle
步骤 2: 启用包
然后,通过将包添加到项目中 app/AppKernel.php
文件中注册的包列表来启用该包
<?php class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new Daric\SilasJoisten\Sonata\MultiUploadBundle\SonataMultiUploadBundle(), ); // ... } // ... }
如果你正在使用 config/bundles.php
中的 flex 注册包
<?php return [ //... Daric\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
,你可以通过在 admin 类中添加路由来实现。
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. 外观和感觉
使用的库