ics / medias-bundle
symfony的文件管理器
0.1.3
2023-09-21 19:16 UTC
Requires
- api-platform/core: ^2
- easycorp/easyadmin-bundle: ^3
- ics/tools-bundle: ^0
- liip/imagine-bundle: ^2
- symfony/browser-kit: ^5
- symfony/config: ^5
- symfony/console: ^5
- symfony/dependency-injection: ^5
- symfony/form: ^5
- symfony/framework-bundle: ^5
- symfony/http-client: ^5
- symfony/http-foundation: ^5
- symfony/orm-pack: ^2
- symfony/routing: ^5
- symfony/twig-bundle: ^5
Suggests
- liip/imagine-bundle: Add liip-imagine pre-configured filters
- sensio/framework-extra-bundle: Configure extra-framework
README
symfony中的文件管理Bundle
安装
确保全局安装了Composer,如Composer文档中的安装章节所述。
使用Symfony Flex的应用程序
打开命令行,进入您的项目目录并执行以下命令
composer require ics/medias-bundle
未使用Symfony Flex的应用程序
步骤1:下载Bundle
打开命令行,进入您的项目目录并执行以下命令以下载此Bundle的最新稳定版本
composer require ics/medias-bundle
步骤2:启用Bundle
然后,通过将其添加到项目config/bundles.php
文件中注册的Bundle列表来启用该Bundle
// config/bundles.php return [ // ... ICS\MediaBundle\MediaBundle::class => ['all' => true], ];
步骤3:安装数据库
安装数据库
# Installer la base de données
php bin/console doctrine:schema:create
更新数据库
# Mise a jour la base de données
php bin/console doctrine:schema:update -f
配置
路由
#config/routes.yaml #... media_bundle: resource: '@MediaBundle/config/routes.yaml' prefix: /medias #...
媒体配置
您可以从公共目录配置相对路径。媒体文件将存储在这个目录中
# config/packages/medias.yaml medias: path: 'medias' # Default Value
用法
Mediabundle提供两种FormType:MediaType
返回一个MediaFile和MediaCollectionType
返回多个MediaFile。您可以在配置中指定相对于媒体路径的输出目录。
实体
use ICS\MediaBundle\Entity\MediaImage; // Exemple entity public class User { /** * Avatar of user * * @var MediaImage * @ORM\ManyToOne(targetEntity=MediaImage::class, cascade={"persist","remove"}) */ private $avatar; /** * Gallery of user * * @var ArrayCollection * @ORM\ManyToMany(targetEntity=MediaImage::class, cascade={"persist","remove"}) */ private $gallery; public function __construct() { $this->gallery=new ArrayCollection(); } }
表单类型
//... public function buildForm(FormBuilderInterface $builder, array $options): void { // For One file $builder->add('avatar',MediaType::class,[ 'outputdir' => 'user/avatar' ]); // For Many files $builder->add('gallery',MediaCollectionType::class,[ 'outputdir' => 'user/gallery' ]); } //...
您可以为所有类型和MediaCollectionType
的大小施加限制
//... public function buildForm(FormBuilderInterface $builder, array $options): void { // For One file $builder->add('avatar',MediaType::class,[ 'outputdir' => 'user/avatar', 'required' => false, 'acceptedFiles' => ['image/jpeg','.jpg'], ]); // For Many files $builder->add('gallery',MediaCollectionType::class,[ 'outputdir' => 'user/gallery' 'required' => false, 'acceptedFiles' => MediaImage::$mimes 'maxFileSize' => '1024' // 1Ko ]); } //...
最大文件大小基于系统能力和您的配置来计算。如果您的配置高于系统能力,则使用系统能力。
命令
实现了两个命令
完整性验证
php bin/console media:file:verify
重复搜索
php bin/console media:search:duplicate
集成
将Bundle添加到EasyAdmin
步骤1:将实体添加到仪表板
将此菜单项添加到您的仪表板Controller/Admin/DashboardController.php
// Controller/Admin/DashboardController.php use ICS\SsiBundle\Entity\User; use ICS\SsiBundle\Entity\Log; class DashboardController extends AbstractDashboardController { public function configureMenuItems(): iterable { // ... yield MenuItem::section('Medias', 'fa fa-photo-video'); yield MenuItem::linkToCrud('Files', 'fa fa-file', MediaFile::class); yield MenuItem::linkToCrud('Pictures', 'fa fa-photo', MediaImage::class); // ... } }
步骤2:将twig小部件添加到仪表板
{% extends "@EasyAdmin/page/content.html.twig" %} {% block page_content %} {{ mediaGraphData() }} {% endblock %}